Grundlagenwissen über Pic´s nötig
Hallo Günther,
und frage Dich, ob Du daran gedacht hast, die richtige
Speicherbank (Bank 0, Bank 1 usw.) auszuwählen, bevor Du die
Tris-Register initialisierst?
Der Programmspeicher der PIC´s ist ja in bis zu 4 Bänken
unterteilt, und die SFR´s sind auf diese verteilt.
Wie muss ich denn da hergehen? Bin etwas neu auf dem Gebiet.
Zunächst solltest Du Dir das Datenblatt Deines PIC´s von der Microchip.Homepage runterladen (www.microchip.com). Dann schau nach, in welcher Speicherbank sich die TRIS-Register befinden. Dazu gibt es eine Übersicht im Datenblatt mit dem Namen „Register File Map“. Dort ist in einer Art Tabelle angegeben, in welcher Speicherbank sich das entsprechende Special-Function-Register (kurz: SFR) befindet, und welche hex-Adresse es hat.
Dort schaust Du wegen der Tris-Register nach.
Dann machst Du folgende Deklaration in Deinem Programm:
#Define TrisA equ 0x85
#Define TrisB equ 0x86
#Define TrisC equ 0x87
#Define Status equ 0x03
durch diese Deklarationen sagst Du dem Compiler, dass z.B. die Speicheradresse „0x85“, welche laut Register File Map die des TrisA-Registers ist, die Bezeichnung „TrisA“ im folgenden Programmtext bekommt.
So wird Dein Programm übersichtlicher, weil Du statt der Hex-Zahl 85 einfach die Bezeichnung „TrisA“ verwenden kannst.
Die hier angegebenen Hex-Zahlen sind nur als Beispiel gedacht. Welche Adresse Du tatsächlich angeben musst, steht in der Register File Map Deines PIC-Datenblattes.
Beim Einschalten der Versorgungsspannug wird der Inhalt aller Tris-Register auf „1“, also auf „Eingang“ gesetzt.
Um in das Tris-Register eine „0“ (Ausgang) reinzuschreiben, musst Du erst die entsprechende Speicherbank auswählen, in der sich das Tris-Register befindet.
Die richtige Speicherbank steht ebenfalls im Register File Map (ganz unten). Üblicherweise befinden sich die Tris-Register in Speichbank 1.
Grundsätzlich ist beim Einschalten der Betriebsspannung immer Bank 0 eingestellt. Um auf Speicherbank „1“ umzuschalten, musst Du entsprechende Bits im Status-Register setzen, bzw. löschen. Welche dies sind, entnimmst Du dem Datenblatt (dort, wo das Status-Register beschrieben wird).
Nachdem Bank 1 eingestellt wurde, kannst Du nun auf die SFR´s dieser Speicherbank zugreifen. Wenn die gewünschte Operation durchgeführt ist, schalte der Ordung halber wieder auf Bank 0 zurück. Damit ersparst Du Dir womöglich lange Fehlersuche.
Ich programmiere die PIC´s nicht in C, sondern in Assembler. Daher könnte es sein, dass Du diese Angaben hier nicht zu 100% übernehmen kannst. Probier´s aus.
Als zweites würde ich an Deiner Stelle mal das Programm mit
dem integrierten Simulator testen. Schau (in einem
Watch-Fenster) nach, ob die Ports ihre Zustände wechseln. Wenn
„nein“, liegt es wohl doch an der vergessenen Umschaltung der
Speicherbänke.
Hm. Ich hatte nach nem Simuator gesucht und keinen gefunden.
Ich benutze wie gesagt den C18-Compiler. Habe auch nur diese
Umgebung installiert.
Von der Microchip-Homepage kannst Du Dir eine integrierte Entwicklungsumgebung herunterladen, MPLAB genannt. Diese beinhaltet auch einen Simulator, d.h. das Programm wird, sofern es in Assembler geschrieben ist (mit Einschränkungen) so auf Deinem PC ausgeführt, als wenn es im PIC laufen würde. Du kannst Dir alle Port- und Registerzustände anzeigen lassen usw.
Doch leider kann ich Dir nicht sagen, ob sich dieser Simulator auch für C-Programme eignet, da ich mich damit noch nicht befasst habe.
Gruß, Alexander
Danke dir.
der Günther