Forum: Mikrocontroller und Digitale Elektronik PIC24 und Bit-Befehler


von Josef M. (Firma: Privat) (jmoellers)


Lesenswert?

Mooi'n,
Über die Beschäftigung mit einem (vermeintlich kaputten) Bus Pirate von 
Dangerous Prototypes bin ich bei den PC24 Prozessoren von Microchip 
gelandet.
Per ICSP kann ich mit dem Teil schon kommunizieren, sowohl von einem 
Arduino als auch von einem RasPi aus.

Leider gibt es für diese Teile keine frei verfügbaren Compiler und 
Assembler, wie für die Atmel-Mikrocontroller, aber es gibt ja nix, was 
einen Hacker hemmt und so habe ich angefangen, einen simpelen Assembler 
zu schreiben. Ich stoße aber auf das Problem, daß es zwar eine 
ausführliche Beschreibung des Befehlssatzes gibt ("16-bit MCU and DSC 
Programmer's Reference Manual"), diese aber extremst vage ist.
Ganz konkret frage ich mich z.B. bei den Bit-Befehlen (BCLR, BSET) wie 
die Bit-Nummer im Befehlswort kodiert wird.
Da steht dann z.B. bei BSET
1010 1001 bbbf ffff ffff fffb
und
The 'b' bits select value bit4 of the bit position to be cleared.
Da es keinen Unterschied zwischen .B und .W, den byte- und 
wort-orientierten Varianten des Befehls, gibt, scheint mir logisch, daß 
das einzelne "b" im LSbit das höchstwertige Bit der Bit-Nummer ist! Kann 
es sein, daß die Bit-nummer "falsch herum" kodiert werden mu, also Bit#1 
z.B. als
1010 1001 100f ffff ffff fff0

Ganz allgemein: hat jemand eine bessere Beschreibung?

Josef

von Hmm (Gast)


Lesenswert?

Josef M. schrieb:
> Mooi'n,
> Über die Beschäftigung mit einem (vermeintlich kaputten) Bus Pirate von
> Dangerous Prototypes bin ich bei den PC24 Prozessoren von Microchip
> gelandet.
> Per ICSP kann ich mit dem Teil schon kommunizieren, sowohl von einem
> Arduino als auch von einem RasPi aus.
>
> Leider gibt es für diese Teile keine frei verfügbaren Compiler und
> Assembler, wie für die Atmel-Mikrocontroller, aber es gibt ja nix, was
> einen Hacker hemmt und so habe ich angefangen, einen simpelen Assembler
> zu schreiben.

Das ist schlicht falsch. Siehe hier:
http://www.microchip.com/mplab/compilers

Eine IDE gibts auch:
http://www.microchip.com/mplab/mplab-x-ide

Und auch Assembler kann man damit uneingeschränkt verwenden. Weder 
Registrierung noch Geld sind nötig.

Der freie Compiler hat zwar Einschränkungen, die sind aber gering (man 
kann nur bis zu einer bestimmten Optimierungsstufe gehen.).
Ich zig Projekte mit PIC24 umgesetzt, und hatte nie Probelme damit.

Im Gegensatz zu ATMEL muss man sich auch nicht registrieren. Mit einem 
PICkit kann man dazu sogar debuggen.

von (prx) A. K. (prx)


Lesenswert?

Josef M. schrieb:
> daß das einzelne "b" im LSbit das höchstwertige Bit der Bit-Nummer ist!

So wirds wohl sein, aber wenn du das nicht als höchstwertiges Bit der 
Bitnummer betrachtest, sondern als niederwertigstes Bit der Adresse in 
einem Byte-Befehl, dann wird die Codierung verständlicher. In dieser 
Interpretation gibt es überhaupt keinen Wort-Befehl, sondern der wird 
vom Assembler auf den Byte-Befehl umgerechnet. Technisch kann das 
natürlich auch andersrum sein, aber so herum betrachtet wirds logisch.

: Bearbeitet durch User
Beitrag #5247361 wurde vom Autor gelöscht.
von Josef M. (Firma: Privat) (jmoellers)


Lesenswert?

A. K. schrieb:
> Josef M. schrieb:
>> daß das einzelne "b" im LSbit das höchstwertige Bit der Bit-Nummer ist!
>
> So wirds wohl sein, aber wenn du das nicht als höchstwertiges Bit der
> Bitnummer betrachtest, sondern als niederwertigstes Bit der Adresse in
> einem Byte-Befehl, dann wird die Codierung verständlicher. In dieser
> Interpretation gibt es überhaupt keinen Wort-Befehl, sondern der wird
> vom Assembler auf den Byte-Befehl umgerechnet. Technisch kann das
> natürlich auch andersrum sein, aber so herum betrachtet wirds logisch.

Ja, so bin ich ja auch darauf gekommen. Inzwischen hat sich aus der 
Logik des reverse-assemblierten Codes ergeben, daß es so ist, daß das 
unterste Bit Adressbit 0 bzw Bitbit 3 ist, die höheren 3 "bbb" Bits in 
der Richtigen Reiehnfolge stehen, in meinem Beispiel
1010 1001 100f ffff ffff fff0
es sich also um Bit #4 des unteren Bytes handeln würde.

von Josef M. (Firma: Privat) (jmoellers)


Lesenswert?

Hmm schrieb:
> Josef M. schrieb:
>> Mooi'n,
>> Über die Beschäftigung mit einem (vermeintlich kaputten) Bus Pirate von
>> Dangerous Prototypes bin ich bei den PC24 Prozessoren von Microchip
>> gelandet.
>> Per ICSP kann ich mit dem Teil schon kommunizieren, sowohl von einem
>> Arduino als auch von einem RasPi aus.
>>
>> Leider gibt es für diese Teile keine frei verfügbaren Compiler und
>> Assembler, wie für die Atmel-Mikrocontroller, aber es gibt ja nix, was
>> einen Hacker hemmt und so habe ich angefangen, einen simpelen Assembler
>> zu schreiben.
>
> Das ist schlicht falsch. Siehe hier:
> http://www.microchip.com/mplab/compilers
>
> Eine IDE gibts auch:
> http://www.microchip.com/mplab/mplab-x-ide
>
> Und auch Assembler kann man damit uneingeschränkt verwenden. Weder
> Registrierung noch Geld sind nötig.
>
> Der freie Compiler hat zwar Einschränkungen, die sind aber gering (man
> kann nur bis zu einer bestimmten Optimierungsstufe gehen.).
> Ich zig Projekte mit PIC24 umgesetzt, und hatte nie Probelme damit.

OK, Danke, das hatte ich bislang noch nicht gefunden.

> Im Gegensatz zu ATMEL muss man sich auch nicht registrieren. Mit einem
> PICkit kann man dazu sogar debuggen.

Um den avr-gcc zu installieren muß ich mich auch nicht registrieren. Und 
für die Arduino-IDE auch nicht.

von Paul2 (Gast)


Lesenswert?

Die PIC24 (sowie dsPIC30, dsPIC33) sind sehr uCs mit sehr eigenwilliger 
Busstruktur, Befehlssatz und v.a. Zuordnung von Programmadressen zu den 
Programm-"bytes".
Aus Anwendersicht für Hobby würde ich mich für alles andere entscheiden.
Das ist ein leidgeprüfter Hinweis.

von Klaus (Gast)


Lesenswert?

Paul2 schrieb:
> Die PIC24 (sowie dsPIC30, dsPIC33) sind sehr uCs mit sehr eigenwilliger
> Busstruktur, Befehlssatz und v.a. Zuordnung von Programmadressen zu den
> Programm-"bytes".
> Aus Anwendersicht für Hobby würde ich mich für alles andere entscheiden.
> Das ist ein leidgeprüfter Hinweis.

Kann ich nicht bestätigen, ich benutze nur C und sehe alles dieses nicht 
(will es auch nicht sehen, bin ja kein Prozessor-Designer oder 
Compiler-Programmierer). Sie sind schön schnell, bis zu 70MHz 
Befehlstakt, ein standard C-int passt genau in die 16-Bit Architektur. 
Es programmiert sich fast wie auf einem PC, und bei der Geschwindigkeit 
und der verfügbaren Speichergröße braucht man keine Tricks und 
Klimmzüge. Trotzdem sind die Peripherals kaum komplizierter als bei den 
bekannten 8-Bittern.

Nur wenn ich mal was mit 8 Pins oder WLan brauche, denke ich über andere 
nach.

MfG Klaus

von Josef M. (Firma: Privat) (jmoellers)


Lesenswert?

Paul2 schrieb:
> Die PIC24 (sowie dsPIC30, dsPIC33) sind sehr uCs mit sehr eigenwilliger
> Busstruktur, Befehlssatz und v.a. Zuordnung von Programmadressen zu den
> Programm-"bytes".
> Aus Anwendersicht für Hobby würde ich mich für alles andere entscheiden.
> Das ist ein leidgeprüfter Hinweis.

Vielen Dank dafür. Erst mal will ich einfach nur gucken und mal was 
Neues ausprobieren. Deswegen bin ich auch dankbar für den Hinweis auf 
den kostenlosen Compiler. Mit der Möglichkeit den PIC per ICSP vom RasPi 
zu beackern bin ich ja auch einen großen Schritt voran (*). Die 5 PIC24s 
haben nicht die Welt gekostet.

Was ja tatsächlich schon mal komisch auffällt ist die Tatsache, daß 
irgendwie jeder Pin gefühlt mit jedem Port verbunden werden kann, so 
über 'ne Art von Kreuzschiene.

Positiv für mich (und einige meiner Projekte) ist die Tatsache, daß 
schon der PIC24FJ64GA002, den ich hier im 28-polige DIP vor mir liegen 
habe, 2 USARTs und auch 2 I²C-Schnittstellen hat. Ob ich die alle 
gleichzeitig nutzen kann (s.o.) weiß ich noch nicht.
Ich hangle mich da dann wohl von Problem zu Problem und am Ende schmeiße 
ich den Krempel entweder frustriert in die Ecke oder hab' was Nettes 
gebaut. Gelernt habe ich dann immer etwas und das ist mit 60 Lebens- und 
inzwischen >35 Informatiker-Berufs-Jahren immer noch was Spannendes. Und 
ich gebe zu: ich freue mich wie ein Kleinkind wenn nach einiger Zeit ein 
"Hello World!" auf dem Display erscheint oder auch nur eine LED blinkt.


Nichtsdestotrotz: Danke, daß Du mich gewarnt hast. Jetzt habe ich keine 
Ausrede mehr ;-)

Josef

(*) Dabei habe ich z.B. gelernt, daß man beim RasPi nicht einfach einen 
GPIO-Pin einmal zum Lesen öffnen und dann beliebig oft den Port-Status 
auslesen kann sondern entweder den Port wieder schließen und neu öffnen 
oder aber ein "lseek(fd, 0, SEEK_SET);" machen muß.

von (prx) A. K. (prx)


Lesenswert?

Josef M. schrieb:
>> Der freie Compiler hat zwar Einschränkungen, die sind aber gering (man
>> kann nur bis zu einer bestimmten Optimierungsstufe gehen.).
>
> OK, Danke, das hatte ich bislang noch nicht gefunden.

Wobei das mit Stand vor vielen Jahren eine verzierte Version des GCC 
ist. Die haben eine Optimierung hinzugefügt, die man auch bei den 
kleineren PICs findet: gleiche Codesplitter zusammen zu fassen. Aber so 
implementiert, dass die GPL wohl nicht verletzt wird, Lizenzcheck 
inklusive. Allerdings ist das nicht die einzige Optimierung, die nur für 
Geld zu haben ist, denn das Steuerprogramm oben drauf ist auch von 
denen. Im normalen GCC ist "gcc" nicht der Compiler selbst, sondern ruft 
bloss den eigentlichen Compiler auf (nebst Assembler, Linker etc).

von (prx) A. K. (prx)


Lesenswert?

Paul2 schrieb:
> Die PIC24 (sowie dsPIC30, dsPIC33) sind sehr uCs mit sehr eigenwilliger
> Busstruktur, Befehlssatz und v.a. Zuordnung von Programmadressen zu den
> Programm-"bytes".

Wobei die eigenwillige Busstruktur nur auf die DSP Varianten zutrifft, 
und auf jene PIC24 Typen, die eigentlich umgelabelte dsPIC33 sind.

Verglichen mit den 8-Bit PICs sind sie jedenfalls eine Wohltat. 
Allerdings sollte man vorher die Errata-Liste lesen.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Josef M. schrieb:
> Was ja tatsächlich schon mal komisch auffällt ist die Tatsache, daß
> irgendwie jeder Pin gefühlt mit jedem Port verbunden werden kann, so
> über 'ne Art von Kreuzschiene.

Das ist nicht komisch, sondern gut. ST könnte sich da eine Scheibe 
abschneiden, angesichts deren Pin-Zuordnungs-Gefummel.

von medizin (Gast)


Lesenswert?

Hi,
für die xc32/16/8 compiler gibt es auch "medizin" zum spielen ohne 
einschränkung.
wer keine ansteckende krankheit hat bekommt sie on request aus meiner 
apotheke!


hypochonder

von Hmm (Gast)


Lesenswert?

A. K. schrieb:
> Josef M. schrieb:
>> Was ja tatsächlich schon mal komisch auffällt ist die Tatsache, daß
>> irgendwie jeder Pin gefühlt mit jedem Port verbunden werden kann, so
>> über 'ne Art von Kreuzschiene.
>
> Das ist nicht komisch, sondern gut. ST könnte sich da eine Scheibe
> abschneiden, angesichts deren Pin-Zuordnungs-Gefummel.

Das ist für Hobyisten der Himmel. Nämlich insbensondere dann, wenn man 
1-Lagig routen muss.

Statt Überkreuzungen mühsam auf der Platine zu machen, kann man das in 
Software tun.

Meine PIC24 Platinen von mir sind die aufgeräumtesten Layouts die ich 
kenne. Im Endeffekt einfach eine Sternverdrahtung, vom PIC raus zur 
Peripherie.

Aber Vorsicht:
Richtig alles auskreuzen kann man nur auf neuen PIC24.
Meine Tipps hierzu sind:
- PIC24FJ128GC006
- PIC24FJ128GA204

Insgesamt bin ich zwar eher auf der PIC32-Schiene unterwegs, aber für 
kleine Projekte nehme ich PIC24 immer gerne wieder. IMHO ein super 
Kompromiss aus Simpel und Leistung - 8Bit Einfachheit ohne 8Bit 
Nachteile.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.