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.

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:
Verifizierung:
Bitte lassen Sie dieses Feld leer:
Geben Sie die Buchstaben aus dem Bild ein
Buchstaben anhören / Neues Bild laden

Geben Sie die Buchstaben aus dem Bild ein:

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

Similar topics (5)