Hallo! Habe da ein Problem meine ersten PIC-Gehversuche überhaupt zum rennen zu kriegen. Laut Debugger kriegt er nicht mal die Einstelungen in den SF-Registern richtig hin. Ich verwende eine PIC16F886 und als Brenner einen iCA01 (anzusehen hier: http://cgi.ebay.at/iCA01-USB-Microchip-PIC-Programmer-Set-ICSP-Adapter_W0QQitemZ280481100449QQcmdZViewItemQQptZLH_DefaultDomain_3?hash=item414df9f2a1#ht_2704wt_959) Software: MPLAB IDE, und PICkit2. Da wäre gleich meine erste Frage. Hat jemand Erfahrung mit diesem iCA01-Teil? Lt. Hersteller funkt es mit der PICkit2 Software von Microchip. Das mach auch so den Anschein. Er erkennt wohl das Gerät und auch den richtigen PIC. Programmieren und Auslesen funktioniert auch ohne Fehlermeldung. Und soweit es mir dieses Setup sagt, auch richtig. Nur wenn ich das Programm im Debugger Step-für-Step durchgehe, macht er nicht gerade das, was die Befehle tun sollten. Anfangen tut es schon mal, daß er beim Build Bemerkungen macht, daß sich gewisse Register nicht in Bank 1 befinden. TRISA usw. Und ich sicherstellen sollte, daß die Bank-Select-Bits richtig gesetzt sind. Aber eben jene hab ich Anfangs per Hand gesetzt, und BANKSEL hab ich auch schon probiert. Wenn ich im Debugger das Status-Register ansehe, dann setzt er sie scheinbar auch richtig. Nur die Befehle ala clrf TRISA, machen irgend was Anderes. Andere Register werden gelöst oder mit nicht nachzuvollziehenden Werten beschrieben. bis er schliesslich noch vor dem Mainloop einen Error hat und anhält. Hier mein kleines Testprogramm: (CONFIG-Bits setzte ich mit Hilfe von MPLAB IDE auf internen OSC. sonst nix.) LIST P=PIC16F886 #include P16F886.inc ;----------------------------------------------------------------------- --------- ORG 0 goto start ORG 4 goto start ;--------------------------------START---------------------------------- --------- start ;---------------------------------Port A/B---------------------------------------- BANKSEL PORTA clrf PORTA ; ini PORTA clrf PORTB ; ini PORTB BANKSEL ANSEL clrf ANSEL ; kein ANALOG clrf ANSELH BANKSEL TRISB ; movlw 0xff movwf TRISA ; Port A ist Eingang ; BEIM FOLGENDEN BEFEHL KOMMT DER BESAGTE ERROR clrf TRISB ; Port B ist Ausgang\ ;--------------------------------OSC Timer------------------------------------- BANKSEL OSCCON bcf OSCCON,IRCF2 ;Interner OSC\ bcf OSCCON,IRCF1 ;auf 31kHz\ ;--------Hauptschleife-------------------------------------------------- ----- BANKSEL PORTA loop movf PORTA,f movwf PORTB goto loop END Hätte da irgend wer einen Tip? Danke!
Also was ich getan habe: PICkit 2 im MPLAB als Brenner eingestellt (bzw. Programmer nennen die das, glaub ich) und nach "Build" auf "Programmer-> Program". und dann in eine extrige Testschaltung. Nachdem da nix sinnvolles rausgekommen ist, hab ich PICkit 2 (wieder im MPLAB) als Debugger ausgewählt, nach erfolgreichem "Build" auf "Debugger->Program" (sollte noch erwähnen, daß dieser Schritt auch ohne Fehlermeldung funktioniert hat) und dann das Programm im Debugger gestartet hab. auch Step-by-Step und geschaut hab was er wo setzt bzw. nicht setzt. Das ganze hab ich mit 3 verschiedenen PIC´s derselben Art gemacht um auszuschliessen, daß einer tot ist. Alle mit dem selben Ergebnis. Was er richtig macht: Registerbank-Bits werden richtig im STATUS-Register gesetzt. Programcounter ist richtig. clrf ANSEL & clrf ANSELH funken wohl richtig. beim Rest macht er (zwar scheinbar konstant) etwas anderes. Zugewiesene Adressen der Register (durch P16F886.inc) stimmen wohl. zumindest stimmen sie in der disasembl-Ansicht mit dem Datenblatt überein.
Hallo Stefan, die Bank-Select-Meldungen (Message[302]) sind nur Hinweise. Wenn Du die Bänke richtig gewählt hast musst Du diese Meldungen nicht weiter beachten. Diese Meldungen kannst Du abschalten wenn Du am Anfang des Programms folgende Zeile einfügt: errorlevel -302 ; no bank select message Die Hauptschleife in deinem Testprogramm soll wohl den Zustand von Port A lesen und auf Port B ausgeben. Der Befehl movf PORTA, f liest Port A und schreibt den Wert wieder auf Port A zurück. Das benutzt man um das Z-bit im Statur Register zu setzen. Um den Wert von Port A in das Arbeitsregister zu landen braucht Du movf PORTA, w Sind die Eingänge von Port A klar definiert (high/low)? Oder sind sie offen? Gruß John
Danke John! Auch wenn das jetzt nicht mein Hauptproblem/Fehler war, hat es sicher dazu beigetragen, daß nix Funktionierendes zu sehen war. Hab jetzt grad ein wenig herumprobiert und bin noch auf ein paar andere Fehlerchen gekommen. Und siehe da, es funkt!!!!!!! Nur der Debugger verhält sich etwas seltsam nach wie vor. aber da hab ich auch schon so eine Idee. Egal, ES LEEEEEEBT!!!! Danke nochmal!
Noch ein Tip: schau Dich mals bei www.sprut.de um, der hat eine ganz tolle Seite speziell für PIC (überwiegend PIC 16Fxxx)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.