MikroBasic Pro für PIC

Begonnen von picass, 02.07.2022, 11:01:51 CEST

Vorheriges Thema - Nächstes Thema

picass

Nun also Microbasic von Mikroelektronika!

Wer die MPLAB-Umgebung kennt und damit erfolgreich Projekte umgesetzt hat, der kommt ohne nennenswerte Anlaufprobleme auch mit diesem Basic-Angebot zurecht.

Is klar, ein erster Test musste her und is auch klar, das war dann mal wieder ,,Hello-World".
Aber genauso klar ist, dass bereits dieses erste, scheinbar niedliche und bestens vorbereitete, weil erstes vorgehaltenes Übungsbeispiel scheiterte! Nix is mit Blinken, alle LEDs befinden sich im Streik!

Nach dem ,,Build"-Befehl wurde eine Unmenge an Dateien ausgeworfen, darunter auch ein Hex-File in der Größe von 1k – vermutlich aufgerundet. Dann also die ,,MPLAB X IPE" angeworfen, damit gebrannt und sich geärgert. Wer diese ,,IPE" nicht kennen sollte, das ist ein Beifang-Programm zur ,,MPLAB X IDE". Letztere ist das Hauptprogramm zum Erstellen eines neuen Projektes und dient auch gleichzeitig zum Brennen. Die IPE ist nur für den Umgang mit dem Programmiergerät zuständig, also Brennen, Verifizieren, Auslesen und Löschen.

Auf diesem Weg liegt kein Fehler, der muss im Programm stecken und das hatte ich nur insofern abgewandelt, indem ich die im PIC18F14K22 nicht vorhandenen Ports  aus dem  Prog strich. Tolle Wurst: Scheitern bereits bei ,,hello world", das macht Lust auf mehr!
Grüße, picass

Peter

Also normalerwiese musst du eigentlich das selbe tun was du in Assemnler gemacht hast.
D.h wenn du Register in Assemnler gesetzt hast musst du das in Basic auch machen.
Ich kenne den Controller nicht, aber muss man hier noch die Ports auf digital setzten ?
Wenn ja dann musst du es in Basic auch machen.
Zum Compiler. Hast du den richtigen Controller ausgewählt ? Hast du die richtige Taktfrequenz eingestellt,
für den Quarz den du benutzt ? Ist am PortC eine LED weil den schaltest du auf high.
Anfang ist immer schwer. Aber wenn man es mal gefressen hat, dann ist es einfach.

pic18

jetzt weiß ich auch wofür die IPE ist, damit hatte ich noch nichts gemacht. Ich benutze meist einen Bootloader.

PICkel

Hallo picass,

stelle mal in der IDE bei Projects -> Edit Project alles so ein, wie im Anhang mit dem roten X angekreuzt.
Dann sollte es gehen. Analog ausschalten braucht man bei Ausgabe nicht.

PICkel
Config.jpg

picass

Zitat von: PICkel in 02.07.2022, 14:31:14 CESTHallo picass,

stelle mal in der IDE..... alles so ein, wie ...... angekreuzt.
Nix!
Das Vierfach-PLL hatte ich angelassen, die Frequenz auf 0,031 MHz eingestellt.Und nu' tut sich was!
Von Blinken kann aber keine Rede sein: alle vier am Port D: angschlossenen LED flackern bedenklich schnell, aber lass ma.... War mein Fehler, ich hatte das Auswahlfeld für die diversen Oszillatoren nicht gescrollt und in der ersten Aufregung den falschen Oszi ausgesucht.
Gettz also Blitzlichtgewitter, siehe da.

Jetzt hebt natürlich das Gemecker in anderem Bereich an. Was ich nun vermisse - vielleicht hab ich es übersehen - ist eine Datei, in welcher dieses Programm und seine Bedienung beschrieben wird. Es gibt da sowas, aber das gereicht nur für einen Überblick über die Funktionen, eine echte Anleitung oder etwas zum Nachschlagen ist das nicht. Und die Online-Hilfe ist schrecklich: da ist jeder Unterpunkt auf einer fast leeren Seite mit nur 5 Sätzen beschrieben, und schon muss man wieder zurück in die Hauptübersicht.
Ist wohl eine Alterssache bei mir: es ist ungut, wenn ich täglich unmässig viele Stunden auf einen Monitor starre, da schmerzen mir Abends die Augen, aber heftig. Lieber wäre mir was zum Ausdrucken. Notfalls kaufe ich auch ein Buch, wenn es denn zu dieser Compiler Software passt.

Grüße, picass

PICkel

#5
Da ist mal was:
https://www.mikroe.com/ebooks/pic-microcontrollers-programming-in-basic/compiler-mikrobasic-pro-for-pic

Vielleicht hilft's weiter. Ansonsten melde Dich nochmal, dann mache ich mal eine Übersicht/Anleitung.
Eigentlich gibt's nur einige wenige Sachen zu beachten.

Noch ein Hinweis:
Die Frequenzeinstellung im Projekt hat KEINEN Einfluss auf den Takt des PIC, sie dient der Berechnung von Wartezyklen durch den Compiler und muss mit der Freq. des Oszillators identisch sein.
Die Frequenz  des PIC-Oszillators muss weiterhin im OSCCON- Register eingestellt werden, lediglich die PLL wird über die Projekteinstellungen  geschaltet, weil sie in die  CONFIG- Register eingetragen wird.

PICkel

Peter

#6
Nein so geht es nicht. Das Programm läuft so nicht richtig da du die Grundeinstellungen
nicht gemacht hast. Also folgendes muss am Anfang eingestellt werde.
1. Wenn du einen externen Quarz benutzt dann muss links im Fenster vom Compiler wo die Frequenz steht,
die Frequenz rein die auf dem Quarz steht und nichts andere rein. Wenn du PLLx4 nimmst dann als Frequenz mal 4 eintragen.
Wenn du den internen Takt nimmst, dann muss als Frequenz dort rein welche Frequenz du dir ausgesucht hast.
Also interner Takt 4MHz als Frequenz 4 MHz eingeben. Genauso wie in Assembler musst du für den internen Takt
weitere Register setzten. Siehe Datenblatt. Hier wäre es noch das OSCCON Register. Alle Register die so ein Pic hat
stehen im Datenblatt. Dürfte dir ja bekannt sein und müssen auch gesetzt werden, dürfte auch von Assembler bekannt sein.
Die Fuses oder Config findest du oben im Fenster unter Projekt/Edit Projekt.
Versuche das zuerst einmal hin zu bekommen, bevor du weiter machst. Das Programm muss sauber laufen und nicht irgendwie laufen.
Die Hilfe F1 ist auch nicht dafür gedacht dir eine Anleitung von A bis Z zu liefern. Sie erklärt dir wie die Befehle
die der Compiler hat zu benutzen sind. Wenn du mit dem Cursor auf einen Befehl gehst, z.B. PORTA und drückst dann
F1 für Hilfe dann bekommst du eine Hilfe für diesen Befehl.
Aber keine Panik am Anfang ist alles was verwirrend und mit der Zeit siehst du auch wieder Licht im Walde  feuerwerk

Peter

Hier kannst du auch nochmal reinschauen: Anleitung
Aber wie bei jeder neuen Programmiersprache gilt, einfach loslegen mit einem Programm. Und
wenn Fragen sind immer her damit.

PICkel

Also, wenn Dir das e-book mit dem schon etwas antiquiertem 16F887 weiterhelfen könnte, dann kann ich Dir die ca. 550 Seiten ausgedruckt zusenden, weil ich schon lange nicht mehr reingesehen habe.
Viele Grundlagen und (Bibliotheks-) Funktionen werden erklärt, aber es gibt natürlich inzwischen etliche neue Funktionen, vor Allem für PIC18, die darin noch nicht enthalten sind.

Gruß
PICkel

picass

Ich bin überwältigt von euren helfenden Angeboten, das ist sagenhaft! Danke! Auch "Durchhalteparolen", Peter, helfen dem Opa auf den Gaul! ;D

Ähm...,PICkel, zwei Angelegenheiten, eine davon via Normalo-Mail, weil es da um etwas Persönliches geht, die andere gettz: sind die 550 ausgedruckten Seiten sowas wie das ganz normale Datenblatt von Microchip oder ist das irgendwas, was mit Basic zu tun hat? Falls Letzteres, würde mir das sicher helfen. Ich könnte dir ein ausgedrucktes Paket-Label von der DHL zuschicken, du besorgst einen oder zwei Aldikartons - so mache ich das immer und den "Rest" schaffen wird dann schon.

Noch was Persönliches von mir: selbst lerne ich am besten, wenn ich Beispiele zu Hand habe, also kleine Programm-Schnipsel, die eine einzige Funktion darstellen, rsp. ein einziges Thema. Microchip hat das mal sehr, sehr gut gemacht nämlich in ihrem Beifang für das "PICkit low pin count demo"-board. Da gab es 13 Lektionen über z.B. Interrupt, Tabellen, Tastenabfragen etc. und jeweils in "C" und Assembler. Daraus lerne ich am schnellsten. Übrigens hatte der Volker mal ein tolles Script erstellt, leider "nur" in "C". Schade, dass es sowas nicht auch in Basic oder Pascal gibt.

Ausgedruckt habe ich selbst erstmal eure letzten Beiträge und werde versuche, die heute umzusetzen, rsp. abzuarbeiten. Heute ist allerdings Sonntag, da muss ich mit meiner Frau immmer stundenlang um einen in der Nähe liegenden Stausee rum laufen, und das alles nur, weil es zur Halbzeit auf dieser Strecke - also am Stauwehr - leckeres Eis gibt. :P
Grüße, picass

PICkel

Hallo picass,

Das ist das ausgedruckte e-book, das ich schon gestern verlinkt habe:
https://www.mikroe.com/ebooks/pic-microcontrollers-programming-in-basic/compiler-mikrobasic-pro-for-pic
Schau mal rein, und wenn's Dir zusagt, schicke ich es Dir. Paketaufkleber ist nicht nötig, es sind nur ca. 275 Blatt, beidseitig bedruckt.

Habe schon mal einen Karton reserviert.

Einen schönen Spaziergang wünscht

PICkel

Peter

Hilfe findest du in der Hilfe vom Compiler.
Wenn du jetzt z.B was über LCDs finden willst, gehst du in die Hilfe und unter Suchen gibst
du LCD ein. Nun bekommst du eine Liste wo du weiter selektieren kannst. SPI LCD, I2C LCD usw.
Wenn du ein Thema ausgesucht hast bekommst du rechts zuerst einmal die Befehle angezeigt die man
für ein LCD braucht. Am Ende der Liste findest du immer ein Demoprogramm wie man es programmieren kann.
Meistens sind auch Schaltpläne am Ende zu finden. Einfach mal ein bisschen mit rum spielen. Demoprogramme
findest du auch in dem Verzeichniss wo du den Compiler installiert hast.
Oder wenn es noch nicht reicht dann auch hier: Libstock

picass

Nachfolgend das orig. Listening zum ,,Erfolg" von gestern. Bei diesem hatte ich – um das Blitzen in das gewünschte Blinken zu ändern – den Wert der Wartezeit von 1000 auf 10000 erhöht.
Die Einstellungen für die Frequenz hatte ich schon gesetzt, also als Frequenz 0,031 MHz angegeben.

Aber nu' zum Listening, da ist schon Etliches seltsam, rsp. Lückenhaft.
Von OSCCON ist da nichts zu sehen, und wie und wo man das da reinfummelt, ist nirgends erläutert. Die Werte für das Reg kenne ich, ab wo und wie?

Unter Variablen – ganz unten – unter 0004 findet sich ein Eintrag hinsichtlich ,,Khz". Was soll das gettz? Muss da eine Zahl rein?

Konsequenz aus all dem: es fehlen solche Beispiele wie im vorigen Statement von Microchip. Das wäre ,ne feine Sache und würd viele Detailfragen unnötig machen.
Grüße, picass

Kann eure Texte nicht mehr lesen, meine Frau steht abmarschbereit...


;  LST file generated by mikroListExporter - v.2.0
; Date/Time: 02.07.2022 17:53:36
;----------------------------------------------

;Address Opcode    ASM
0x0000   0xF000EF0E     GOTO        28
0x0004   0x0000         NOP
0x0006   0x0000         NOP
0x0008   0xF000EF00     GOTO        0
0x000C   0x0000         NOP
0x000E   0x0000         NOP
0x0010   0x0000         NOP
0x0012   0x0000         NOP
0x0014   0x0000         NOP
0x0016   0x0000         NOP
0x0018   0xD7F3         BRA         0
_main:
;helloworld6.mbas,5 ::       main:
;helloworld6.mbas,7 ::       TRISA = 0         ' set direction to be output
0x001C   0x6A92         CLRF        TRISA
;helloworld6.mbas,8 ::       TRISB = 0         ' set direction to be output
0x001E   0x6A93         CLRF        TRISB
;helloworld6.mbas,9 ::       TRISC = 0         ' set direction to be output
0x0020   0x6A94         CLRF        TRISC
;helloworld6.mbas,11 ::       while TRUE
L__main2:
;helloworld6.mbas,12 ::       LATA = 0x00     ' Turn OFF LEDs on PORTA
0x0022   0x6A89         CLRF        LATA
;helloworld6.mbas,13 ::       LATB = 0x00     ' Turn OFF LEDs on PORTB
0x0024   0x6A8A         CLRF        LATB
;helloworld6.mbas,14 ::       LATC = 0x00     ' Turn OFF LEDs on PORTC
0x0026   0x6A8B         CLRF        LATC
;helloworld6.mbas,15 ::       Delay_ms(10000) ' 1 second delay
0x0028   0x0E65         MOVLW       101
0x002A   0x6E0C         MOVWF       R12, 0
0x002C   0x0EA4         MOVLW       164
0x002E   0x6E0D         MOVWF       R13, 0
L__main6:
0x0030   0x2E0D         DECFSZ      R13, 1, 0
0x0032   0xD7FE         BRA         L__main6
0x0034   0x2E0C         DECFSZ      R12, 1, 0
0x0036   0xD7FC         BRA         L__main6
;helloworld6.mbas,17 ::       LATC = 0xFF     ' Turn ON LEDs on PORTC
0x0038   0x0EFF         MOVLW       255
0x003A   0x6E8B         MOVWF       LATC
;helloworld6.mbas,18 ::       Delay_ms(10000) ' 1 second delay
0x003C   0x0E65         MOVLW       101
0x003E   0x6E0C         MOVWF       R12, 0
0x0040   0x0EA4         MOVLW       164
0x0042   0x6E0D         MOVWF       R13, 0
L__main7:
0x0044   0x2E0D         DECFSZ      R13, 1, 0
0x0046   0xD7FE         BRA         L__main7
0x0048   0x2E0C         DECFSZ      R12, 1, 0
0x004A   0xD7FC         BRA         L__main7
;helloworld6.mbas,19 ::       wend              ' Endless loop
0x004C   0xD7EA         BRA         L__main2
L_end_main:
0x004E   0xD7FF         BRA         $+0
; end of _main
Symbol List:
//** Routines locations **
//ADDRESS    SIZE    PROCEDURE
//----------------------------------------------
0x001C      [52]    _main
//** Variables locations **
//ADDRESS    SIZE    VARIABLE
//----------------------------------------------
0x0000       [1]    R0
0x0001       [1]    R1
0x0002       [1]    R2
0x0003       [1]    R3
0x0004       [4]    Get_Fosc_kHz_local_result
0x0004       [1]    R4
0x0005       [1]    R5
0x0006       [1]    R6
0x0007       [1]    R7
0x0008       [1]    R8
0x0009       [1]    R9
0x000A       [1]    R10
0x000B       [1]    R11
0x000C       [1]    R12
0x000D       [1]    R13
0x000E       [1]    R14
0x000F       [1]    R15
0x0010       [1]    R16
0x0011       [1]    R17
0x0012       [1]    R18
0x0013       [1]    R19
0x0014       [1]    R20
0x0F89       [1]    LATA
0x0F8A       [1]    LATB
0x0F8B       [1]    LATC
0x0F92       [1]    TRISA
0x0F93       [1]    TRISB
0x0F94       [1]    TRISC

Peter

Ich hatte dir aber schon geschrieben wie die Freuqenz ein zu stellen ist. Wie kommst du auf diese komische
Frequenz ? Lies dir meinen Beitrag nochmal durch und stell die Frequenz richtig ein. Dein Arbeitsbereich ist
der Compiler selbst wo du deinen Code eingibst. In dem Assemblerlisting hast du selber nichts zu machen.
Register die im Datenblatt stehen haben nichts mit dem Compiler zu tun. Diese Befehle wirst du auch nicht in der
Doku oder Hilfe vom Compiler finden, sie stehen im Datenblatt zum jeweiligen Controller. Müssen aber jenachdem was
du mit dem Controller machst, gesetzt werden. Und dieses macht man im Compiler Fenster. Hier muss für den internen
Takt noch das OSCCON Register gesetzt werden. Das musstest du doch wenn du das selbe Programm in Assembler programmierst
auch gesetzt haben das OSCCON Register mit einem Wert natürlich.
im Compiler gibst du einfach vor der Programmschleife den Befehl OSCCON = 228 für 8MHz internen Takt ein.
Oder einen andern Wert für eine andere Frequenz. Diese Frequenz muss dann im Compiler links in das Feld für
Frequenz auch eingegeben werden. Sonst läuft dein Programm nicht richtig.
Zusätzlich müssen die Fuses noch richtig eingestellt werden für den internen Takt. Wurde aber weiter oben schon beschrieben.
Der Compiler hat eigene Befehle wie LCD_Init WHILE TRUE usw. und dann gibt es noch die Register vom PIC die im Datenblatt
stehen. Diese Befehle findest du nur im Datenblatt nicht im Compiler. Diese Register vom Pic müssen jenachdem was der Pic
machen soll auch noch in das Compilerfenster mit rein.

Peter

Hier nochmal was ich unten geschrieben habe in Bildern.
Wenn du so alles einstellst und eingibst, dann sollte das Programm
laufen.

PICkel

Viiiele Fragen, hier einige Antworten:

- OSCCON wird hier nicht gesetzt bzw. geändert, die Standardeinstellung nach Prog.- Start ist der interne Oszillator mit 1MHz bei der vorgegebenen Konfiguration des Projektes. Siehe Projekteinstellungen.

- R0 bis R20 sind Register, die von der CPU direkt angesprochen werden können. Werden hier vom Compiler zum delay_ms(1000) benutzt. Sie müssen nicht als Variablen deklariert werden.

- R4 enthält Informationen zur Taktfrequenz, falls diese im Programm z.B. mit Get_Fosc_kHz() abgefragt wird. Du brauchst Dich da also nicht drum zu kümmern.

(Peter hat ja inzwischen auch geschrieben.)

PICkel

PICkel

So, ich habe mal ein bissel was zusammengeschrieben:

- Ein Demo- Programm über den Aufbau einer Programmdatei. Enthält auch ein paar Zeilen, die nur als Beispiel dienen, aber im Prog. selbst nicht relevant sind.
- Eine Bitmap- Datei mit den möglichen Variablentypen. Habe ich mir zur schnellen Information ins Windows- Hintergrundbild eingebunden

Eine Kurzdoku wollte ich noch anhängen, die überschreitet aber die max. mögliche Dateigröße.

Gruß
Johannes alias PICkel

mBASIC_Demo.zip

picass

Zitat von: PICkel in 03.07.2022, 11:42:56 CEST- OSCCON wird hier nicht gesetzt bzw. geändert, die Standardeinstellung nach Prog.- Start ist der interne Oszillator mit 1MHz bei der vorgegebenen Konfiguration des Projektes. Siehe Projekteinstellungen.

Gesucht wird immer noch das, was ich als "Progamm" ansehe. Darunter verstehe ich die Ansammlung von Text, Variablen, etc., etc., Kommentaren, usw., usw., mit welchem man ein neues Projekt erstellen kann und gettz kommt das Wichtige: das nach dem Compilieren auch läuft.

Die Takteinstellung scheint ja ein echtes Betriebsgeheimnis. Natürlich hatte ich - vom allerersten Prog-Entwurf abgesehen, als ich den falschen Oszi auswählte - bei jedem neuen Projekt den Takt bei den Propertys angegeben. Hat nur leider keinerlei Wirkung, da scheint es sich um eine verborgene reine Statiskmaßnahme ohne jedwede Wirkung zu handeln.

Also gut, Peter meinte, das OSCCON Register müsse angegeben werden. Meine Frage nach "wie" und "wo" ist allerdings nicht beantwortet und auch nach dem kompletten Schnelllesen der Hilfe, rsp. des Tutorials war da außer dem unten stehenden Hinweis, es handle sich wohl um was Neues, das demnächst eingeführt würde, konnte ich nichts Praktikables entdecken.
Also schrieb ich mal mutig das OSCCON einfach in die "Settings" rein, probierte auch verschiedene Einrückungen, aber außer der Meckermeldung: "Fehler" kam nichts mehr.

Ach ja, nochmal zur Wiederholung: ich hatte als Takt den von mir zuletzt immer verwendeten Takt des internen Oszi mit 31 kHz gewählt, im Basic-Prog hieß das dann: 0.031000 MHz. Bei späterer Kontrolle stand dann im Fenster: 0,030999 MHz.

Hier der letzte Versuch:
-------------------------
-----------------------------------------------------
program helloworld07

' Declarations section
OSCCON = 0x02

main:
'  Main program LED_Blinking
  TRISA = 0        ' set direction to be output
  TRISB = 0        ' set direction to be output
  TRISC = 0        ' set direction to be output

  while TRUE
    LATA = 0x00    ' Turn OFF LEDs on PORTA
    LATB = 0x00    ' Turn OFF LEDs on PORTB
    LATC = 0x00    ' Turn OFF LEDs on PORTC
    Delay_ms(1000)  ' 1 second delay

    LATC = 0xFF    ' Turn ON LEDs on PORTC
    Delay_ms(1000)  ' 1 second delay
  wend              ' Endless loop
end.

--------------------------------------------------------------
Shared Address SFRs
mikroBasic PRO for PIC does not provide auto setting of bit for acessing alternate register. This is new feature added to pic18fxxjxx family and will be supported in future. In several locations in the SFR bank, a single address is used to access two different hardware registers. In these cases, a "legacy" register of the standard PIC18 SFR set (such as OSCCON, T1CON, etc.) shares its address with an alternate register. These alternate registers are associated with enhanced configuration options for peripherals

---------------------------------------


Grüße und noch einen schönen Sonntag-Abend, picass

Peter

Ich habe doch in meinem letzten Post Bilder eingefügt wo du genau sehen kannst
was wie eingestellt werden muss. Tipp das Programm doch einfach ab und stell es so
ein wie ich es in den Bilder gemacht habe. Dann sollte es laufen.
Und wenn das läuft dann kannst du uns mal erzählen wie deine Schaltung aussieht.
Ist sie mit Quarz oder ohne welchen Takt willst du haben ?
Ein neues Projekt machst du mit New Projekt. Findest du oben in der Leiste vom Compiler.

Peter

Nochwas. Anscheinend willst du 31KHz als Takt haben. Wenn ich das richtig sehe im Datenblatt
müssen noch andere Register eingestellt werden. Habe aber den PIC nicht da und kann es
selber nicht testen. Deshalb versuch zuerst mal mein Programm ans laufen zu bekommen und wenn
das läuft sehen wir weiter. Wenn es nicht läuft dann mal mal Screenshots von dem Programm und den
Einstellungen. Wie ich es gemacht habe.
Und was nicht läuft oder nicht richtig läuft.

Schnellantwort

Achtung: In diesem Thema wurde seit 120 Tagen nichts mehr geschrieben.
Wenn Sie nicht absolut sicher sind, dass Sie hier antworten möchten, starten Sie ein neues Thema.

Name:
Tastenkürzel: Alt+S Beitrag schreiben oder Alt+P für Vorschau

Similar topics (5)