Ich habe vor von 8bit auf 16bit (PIC24) umzusteigen. Das Testboard habe
ich bald fertig, ich warte noch auf die PICs.
Ich möchte wie ich es auch bei den 8bit PICs gemacht habe erst die
Basics in ASM lernen, und wenn ich das kann zu C übergehen.
Kennt jemand ein gutes Tutorial zur Programmierung von PIC24 in ASM?
Es kann auch englisch sein, ich würde Deutsch aber bevorzugen.
Ich habe mit auch Datenblätter von einem dsPIC30 angesehen. Kann es
sein, dass der dsPIC30 und der PIC24 einen ähnlichen oder den gleichen
Befehlssatz haben?
Ich möchte nicht dass in diesem Thread über darüber diskutiert wird, ob
es überhaupt sinnvoll ist mit ASM anzufangen...
Grüße
Max
Gibt es meines Wissens nichts was Anspruch auf ein "Turorial" erheben
kann.
Wenn du die 8-Bitter in ASM beherschtst, brauchst du für PIC24 kein
Tutorial welches mit einer blinkenden LED beginnt sondern etwas
spezielles die 16-Bit PIC betreffend:
DS70157D "16 bit MCU and DSP programmer's reference manual" zum
runterladen bei MICROCHIP.
Im MICROCHIP forum gibt es eine Liste von Links mit ASM relevanten
Themen und Beispielen:
http://www.microchip.com/forums/tm.aspx?m=442087&mpage=1&key=%F1%AF%97%B9
Runterscrollen zum Eintag von "Guest" vom November 03, 2009 (dort ist
auch gleich der Link zum DS70157D).
Der dsPIC30 Befehlssatz ist eine Erweiterung des PIC24 Befehlssatzes umd
DSP-relevante Befehle...und noch einige Besonderheiten, die aber im
DS70157D nachzulesen sind.
Max H. schrieb:> Ich habe mit auch Datenblätter von einem dsPIC30 angesehen. Kann es> sein, dass der dsPIC30 und der PIC24 einen ähnlichen oder den gleichen> Befehlssatz haben?
Mit den dsPIC30 fing Microchip im 16-Bit Segment an. Aus dieser heute
veralteten Reihe leiteten sie später die PIC24 und dsPIC33 ab. Bei den
PIC24 flog die DSP-Einheit mitsamt der Befehle raus. Einige dieser Chips
existieren identisch als PIC24 und dsPIC33 Variante, unterschieden nur
im DSP-Befehlssatz (vmtl. Marketing/Preis aber intern gleicher Chip).
Chris B. schrieb:> Wenn du die 8-Bitter in ASM beherschtst, brauchst du für PIC24 kein> Tutorial welches mit einer blinkenden LED beginnt
Ich habe eigentlich so etwas gesucht, damit würde ich dann Lernen, wie
das mit den Configs und dem Oszillator gemacht wird und ich habe einen
kurzen Beispielcode, den Rest würde ich mir dann mit dem Befehlssatz
erarbeiten.
Also mit einem einfachen Programm starten und dann darauf aufbauen.
Meister Eder schrieb:> hier ein Link mit einem einfachen Beispielprogramm (Beitrag vom> 31.01.2009):
Ich denke damit kann ich was anfangen, muss aber noch auch meinen
PIC24F16KA102 warten. Ich werde berichten, wenn sich was tut...
Danke.
Vllt. beende ich auch vorher mein 8bit ASM Project, sonst könnte ich mit
den verschiedenen ASMs durcheinander kommen.
Der PIC ist heute noch angekommen und ich habe gleich losgelegt: Die LED
blinken jetzt mit 330kHz. Ich habe noch kein delay gemacht.
Ich habe dieses configs Verwenden:
Ich verstehe die Syntax zum Setzen der config bits nicht.
Es gibt __CONFIG1 und 2 aber in PIC gibt es ja 8 Configuration Register.
Zu welchem __CONFIGx muss ich dann meine bits schreiben?
Am Quarz messe ich aber 2 MHz, obwohl ich einen 8MHz Quarz eingebaut
habe.
Max H. schrieb:> Der PIC ist heute noch angekommen und ich habe gleich losgelegt: Die LED> blinken jetzt mit 330kHz. Ich habe noch kein delay gemacht.
Gratuliere, freut mich für dich.
> Ich habe dieses configs Verwenden:>
> Ich verstehe die Syntax zum Setzen der config bits nicht.> Es gibt __CONFIG1 und 2 aber in PIC gibt es ja 8 Configuration Register.> Zu welchem __CONFIGx muss ich dann meine bits schreiben?
Schau in die Header-Datei p24FJ128GA010.inc, dort stehen die Identifier
der Configbits gruppiert nach ihrer Zugehörigkeit zu __CONFIGx.
Aus dem Gedächtnis (seit 2 Jahren kein 16-Bit PIC mehr in ASM
programmiert):
Es gibt auch noch __CONFIG2 evtl auch __CONFIG3, die wurden aber im
Beispiel nicht gebraucht bzw. deren Default-Werte verwendet.
>> Am Quarz messe ich aber 2 MHz, obwohl ich einen 8MHz Quarz eingebaut> habe.
Ist es sicher ein 8MHz Grundtonquarz? An den Configbits liegt es nicht,
was an OSC0 und OSC1 schwingt muss eigentlich der Quarz sein, weil
OSCIOFNC_OFF und HS dürfte auch stimmen.
Mein PIC hat diese configs: FBS FGS FOSCSEL FOSC FWDT FPOR FICD FDS
Muss ich sie alle einen mit
config __BSF
config __FGS
….
setzen?
Wenn ich die *.inc vergleiche, denke ich, dass es so sein wird.
Das mit dem Oszillator könnte dann so sein, weil ich mit dem __CONFIG1
die bits irgendwie falsch einstelle.
Das 2MHz Signal am Quarz ist ein fast perfektes Rechteck, es könnte also
sein, dass der Pin als clock out eingestellt ist.
Ich werde es jetzt mit config __BSF config __FGS versuchen.
Edit:
Es waren die Config. Ich habe es jetzt so gemacht und es passt.
1
config __FBS, BWRP_OFF ;Boot segment may be written
2
config __FGS, GWRP_OFF & GCP_OFF ;General segment may be written & No protection
Vielen Dank für die Hilfe.
Ich denke jetzt da die configs passen, brache ich um weiter zu kommen
nur den Instruction Set und Übung.
Edit: Die PLL läuft jetzt auch.
Ok, danke für die Rückmeldung mit der config Direktive, da habe ich ja
gut daneben getippt. Mein Beispiel ist noch unter MPLAB8 geschrieben, du
verwendest wahrscheinlich MPLABX, oder?
Hab schon am Rande mitbekommen, dass sich ein paar Dinge geändert haben,
aber was man mal lange so drin hatte...
Muss mir das bei Gelegenheit mal anschauen, ist ja schon böse, dass die
__CONFIG Makros mit den alten Argumenten überhaupt übersetzt werden.
Noch mal ein Dank an alle (vor allem Meister Eder) die mir geholfen
haben.
Und falls jemand irgendwann diesen Thread findet könnte er meinen Code
für einen 16bit Knighrider vllt. brauchen. Die Schaltung dazu ist ein
PIC24F16KA102 mit einem 8MHz Quarz und 16 LEDs an PORTB.
1
.equ __24F16KA102, 1
2
.include "p24F16KA102.inc"
3
config __FBS, BWRP_OFF ;Boot segment may be written
4
config __FGS, GWRP_OFF & GCP_OFF ;General segment may be written & No protection
Will ich jetzt z.B. den primeren Oszillator mit PLL aktivieren und den
"Internal External Switchover mode" deaktivieren sieht die config
Anweisung
so aus:
1
config __FOSCSEL, FNOSC_PRIPLL & IESO_OFF
Das hört sich jetzt eigentlich ziemlich einfach an, aber das gelöste
Problem sieht immer relativ einfach aus.
Meine frage neich einem Tut ist hiermit zu einem kleinen Config tutorial
geworden ;-)
Grüße
Max