-         

Ergebnis 1 bis 6 von 6

Thema: 16F877A - Startschwierigkeiten beim Proggen

  1. #1
    Neuer Benutzer
    Registriert seit
    15.02.2010
    Alter
    27
    Beiträge
    2

    16F877A - Startschwierigkeiten beim Proggen

    Anzeige

    Hi,

    ich hab' noch ein wenig Startschwierigkeiten mit dem 16F877A. Hab' dazu das Lauflichtbeispiel von Sprut für den 16F84 hergenommen und ein wenig umgestrickt für den 16F877A. Ich verwende einen 20MHz-Quarz und 8 LEDs am Port B.

    Das sieht dann aus wie folgt:
    Code:
            list p=16f877A 
    ;************************************************************** 
    ;* 
    ;* Pinbelegung 
    ;*      ----------------------------------  
    ;*      PORTA:  0  
    ;*              1  
    ;*              2  
    ;*              3  
    ;*              4  
    ;*      PORTB:  0 LED  
    ;*              1 LED 
    ;*              2 LED  
    ;*              3 LED  
    ;*              4 LED  
    ;*              5 LED  
    ;*              6 LED  
    ;*              7 LED  
    ;* 
    ;************************************************************** 
    ; 
    ; sprut (zero) Bredendiek 05/2000 (mod. am 16.01.2002)  
    ; 
    ; Lauflicht am Port B  
    ; 
    ; Taktquelle: 4MHz 
    ; 
    ;************************************************************** 
    ; Includedatei für den 16F84 einbinden 
    ; 
            #include <P16f877A.INC> 
    ; 
    ; Configuration festlegen 
    ; 
    
    ; 
    ; ab 4 MHz: Power on Timer, kein Watchdog, HS-Oscillator 
           __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF
    ; 
    ;************************************************************** 
    ; Variablennamen vergeben 
    
    loops   Equ     0x70            ; Zähler für Warteschleife  
    loops2  Equ     0x71            ; Zähler für Warteschleife  
    
    ;************************************************************** 
    ; los gehts mit dem Programm 
    ; Port B auf Ausgabe stellen 
    
    Init 
            bcf	INTCON,GIE
    		bcf	STATUS, RP1
    	bsf     STATUS, RP0     ; auf Bank 1 umschalten 
            movlw   B'00000000'     ; PortB alle output 
            movwf   TRISB 
            bcf     STATUS, RP0     ; auf Bank 0 zurückschalten 
            clrf    PORTB           ; alle LEDs ausschalten 
    
    ; 1. LED einschalten  
    
            bsf     PORTB,0         ; LED an RB0 einschalten 
    
    ; Lauflicht 
    
    Loop 
            call    Wait            ; Wartezeit 
            rlf     PORTB,f         ; laufen zur nächsten LED 
            goto    Loop  
      
    
    ;********************************************************** 
    ; Warteschleife 250 ms 
    
    Wait 
            movlw   D'250'          ; 250 ms Pause 
            movwf   loops  
    
    Wai 
            movlw   .110           ; Zeitkonstante für 1ms 
            movwf   loops2 
    Wai2    nop                    ;  
            nop 
            nop 
            nop 
            nop 
            nop 
            decfsz  loops2, F      ; 1 ms vorbei? 
            goto    Wai2           ; nein, noch nicht 
                                   ; 
            decfsz  loops, F       ; 250 ms vorbei? 
            goto    Wai            ; nein, noch nicht 
            retlw   0              ; das Warten hat ein Ende 
    
            end
    Jetzt zu meinem Problem:
    Schalte ich den Strom an, so leuchten nacheinander so drei oder vier LEDs und das wars dann. Anschließend bleiben alle dunkel.
    Ich dachte, dass es zu tun hat mit dem LVP-Modus, habe deshalb schon den LVP mittels _LVP_OFF explizit ausgeschaltet.
    Außerdem habe ich um sicher zu gehen, sämtliche Interrupts ausgeschaltet mit bcf INTCON,GIE .

    Blockkondensatoren habe ich auch am PIC jeweils zwischen Vdd und GND.

    Die Schaltung habe ich auch schon mit einem Beispiel von http://www.voti.nl/blink/code/b877-1.hex ausprobiert und da hat dann in meiner Schaltung die LED bei RA0 geblinkt, so wie es sein soll.

    Könnte bitte mal jemand über das obige Programm drübergucken und mich auf eventuelle Fehler hinweisen. Dürfte für jemanden mit ein wenig Erfahrung eine kleine Sache sein. Ich möchte nur sicher gehen, dass in der Software kein Fehler ist.

    LG Claudi

  2. #2
    Hallo,
    Erst einmal Tag an Alle, ich bin Djog und neu hier.

    Schau Dier mal deine Wait an die ist für einen 4Mhz geschrieben. Für einen
    20 Mhz brauchst Du 20 Zyklen und 249 Durchläufe.

  3. #3
    Neuer Benutzer
    Registriert seit
    15.02.2010
    Alter
    27
    Beiträge
    2
    Zitat Zitat von Djog
    Schau Dier mal deine Wait an die ist für einen 4Mhz geschrieben. Für einen 20 Mhz brauchst Du 20 Zyklen und 249 Durchläufe.
    Danke erstmal für das Feedback, aber das mit der Geschwindigkeit ist nicht das eigentliche Problem.

    Ich habe die Lösung immer noch nicht. In ein paar seltenen Fällen hat das Programm ordnungsgemäß funktioniert und das Licht lief von links nach rechts und wenn es rechts fertig war, hat es links wieder angefangen.

    Ich meinte, das war, wenn ich mit dem Einschalten der Schaltung einige Minuten gewartet habe. Das ließ sich aber auch nicht immer reproduzieren.

    Ich glaube mittlerweile, dass es mit der Taktversorgung zu tun hat. Dass nämlich die Kondensatoren vom Quarz zu weit entfernt sind. Hab' nämlich den Quarz nicht ganz runter auf die Platine platzieren können, sondern der steht mit seinen Beinen etwa 6 oder 7 Millimeter über der Platine, weil die beiden Kondensatoren im Weg sind.

    Auf dem Lochmaster-Entwurf war eigentlich für die Kondensatoren genug Platz, aber in der Realität haben sich die, und der Quarz auch, als etwas größer erwiesen.

    Ich werd morgen nochmal den Lötkolben in die Hand nehmen und den Quarz so tief wie möglich setzen, und die Kondensatoren auf der Unterseite der Platine anordnen.

    Außerdem sollte meine Schaltung noch mit einer Reset-Taste aufgerüstet werden. Zum neustarten muss ich bisher immer eine Krokodilklemme wegnehmen und wieder dranmachen.

    LG Claudi

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.09.2006
    Ort
    Hamburg
    Alter
    35
    Beiträge
    987
    hi wie viel C haste am Quartz ich hab gute Erfahrungen mit 22p gemacht du kannst noch mal _WRT_OFF auf on setze dann wartet er beim einschalten etwas bis der Quarz angeschwungen ist.
    Legastheniker on Bord !

    http://www.Grautier.com - Projektseite
    http://www.grautier.com/wiki/doku.php?id=bt-index - BT-BUS

  5. #5
    Hi,


    ich kenne die Seite von Sprut damit habe ich mir auch die ersten groben Züge des Programmierens beigebracht. Hier ein Dank an den Autor dieser Seite.

    Ich vermute, das dein Problem daran liegt, dass das Programm auf der Seite für den PIC16F84A gilt.

    Sollte dies der Fall sein, ist die Initialisierung des PICs nicht korrekt und somit führt er Operationen, welche nach Außen sinnlos erscheinen.

    Gruß

    S

  6. #6
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.969
    Hallo!

    @ Claudi

    Hoffentlich hilft dir Wiki Artikel http://www.rn-wissen.de/index.php/PI...IC_umschreiben

    MfG

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •