Forum: Mikrocontroller und Digitale Elektronik Starthilfe für PIC16F886&iCA01


von Stefan Z. (grundlos)


Lesenswert?

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!

von morph1 (Gast)


Lesenswert?

wieso brennst du nicht direkt aus dem MPLAB mit dem PikKit 2?

von Stefan Z. (grundlos)


Lesenswert?

Das mach ich doch. Oder versteh ich da was falsch?

von Stefan Z. (grundlos)


Lesenswert?

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.

von John B. (johnbauer)


Lesenswert?

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

von Stefan Z. (grundlos)


Lesenswert?

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!

von stephan_ (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.