- Labornetzteil AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Anängerfehler PIC16f628a

  1. #1

    Anängerfehler PIC16f628a

    Anzeige

    Praxistest und DIY Projekte
    Hallöchen

    Ich lerne gerade Assembler und habe da ein kleines Problem, wobei ich denke das es sich um ein reines Anfängerproblem handelt.



    Code:
    	
    
                    Adresse equ 0x20 ; Vergleichsadresse, kann irgendein 5bit enthalten. Zum testen schreibe ich einfach 0h
    
                    MOVLW 0h                    ; Wert in W
                    MOVWF Adresse            ; W nach Register
    
                    MOVLW b'00000111'	   ; Komperatorausgänge nutzen
    	MOVWF 1Fh			
    
                    BSF STATUS, RP0	   ; auf BAnk 1 wechseln	
    	BCF TRISB, 0                ; Soll als Augang fungieren
    	BCF STATUS, RP0	   ; zurück nach Bank 0	
    	CLRF PORTA                 ; Eingänge PortA auf low
                    CLRF PORTB                 ; Eingänge PortB auf low
    Nach meinem Verständnis sollte hiermit der Pin RB0 als Ausgang definiert sein und alle anderen Pins ein Low level haben.

    Dann möchte ich die Pegel an den Pins abfragen:

    Code:
    	BTFSC PORTA, 0 
    	BSF Adresse, 0
    	BTFSC PORTA, 1
    	BSF Adresse, 1
    	BTFSC PORTA, 2
    	BSF Adresse, 2
                    BTFSC PORTA, 3
    	BSF Adresse, 3
    	BTFSC PORTA, 4
    	BSF Adresse, 4
    Hierbei sollten nach meinem Verständnis die BSF Befehle ignoriert werden, da die eingelesenen Pegel = 0 sind. Das scheint auch zu funktionieren.
    Wenn ich aber in das Register PORTA = ffh schreibe, müssten hierbei doch die Ausgänge alle auf High stehen und somit bei dem letzten Codeabschnitt die BSF Befehle ausführen. Oder sehe ich das falsch??

    Nur falls die Frage aufkommt was die Schaltung können soll:

    Beim initialisieren wird das REgister Adresse mit einem Nullwert erstellt. Beim einlesen der Pin Pegel von PortA soll das anliegende Bitmuster in das Register geschrieben werden. Im weiteren Schritten die hier aber nicht aufgeführt sind soll später das Register mit einem 5 Bit Muster von PortB verglichen werden. Das macht vieleicht für euch nicht viel Sinn, aber für Mein Verständnis an diesen kleinen Teilchen unverzichtbar


    Für eure Hilfe bedanke ich mich im voraus

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    06.06.2007
    Ort
    Aurich
    Beiträge
    36
    naja, PortA hatnoch weitere funkrtionen außer dem digitalen I/O ist da denn alles richtig initialisiert??
    Wenn dein PortA Input ist kannst du dem kein Signal vorgeben, sondern liest mit btfsc die pegel der Portpins...
    Irgendwas ist immer...

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.09.2006
    Ort
    Hamburg
    Alter
    42
    Beiträge
    1.013
    hi schau dir mal folgendes an:
    Code:
    ; PORTA
    	banksel		TRISA			; Bank Wekseln
    	movlw		B'00000000'		; PortA I/O setzen (1=In, 0=Out) (Reinfolge RA7,RA6...)
    	movwf		TRISA			; PortA I/O setzen
    	movlw		B'11111111'		; Analog/Digital I/O (0=Analog, 1=Digital) (Reinfolge RA0,RA1...)
    	banksel		ADCON1			; Bank Wekseln
    	movwf		ADCON1			; PortA I/O setzen
    	clrf			PORTA			; PortA auf 0 setzen
    ; PORTB
    	banksel		TRISB			; Bank Wekseln
    	movlw		B'000000000'		; PortB I/O setzen (1=In, 0=Out) (Reinfolge RB7,RB6...)
    	movwf		TRISB			; PortB I/O setzen
    	banksel		PORTB			; Bank Wekseln
    	clrf			PORTB			; PortB auf 0 setzen
    p.s. des mit dem banksel ist wesentlich einfacher als mit dem "bsf status RP0..." des mach den der compiler automatisch.
    Legastheniker on Bord !

  4. #4
    Habe ich deine Antwort richtig verstanden?

    der Befehl 'banksel adresse' wechselt automatisch in die Bank in der das Register 'adresse' liegt?

    eine FFh nach TRISA definiert alle Pins an Port A als Eingänge?

    Der PIC16F628a hat kein ADCON1 Register. Was soll dieser Befehl bewirken?

    PortA hatnoch weitere funkrtionen außer dem digitalen I/O ist da denn alles richtig initialisiert??
    Ich habeden Wert 7h nach adresse 1Fh geschrieben um die Komperatoreingänge nutzen zu können.

    kann ich nichtmit irgendeinem Befehl die Eingänge so simulieren das sie sich so verhalten wie in der späteren Schaltung (High/Low)?? Wie soll ich sonst den Code prüfen?

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.09.2006
    Ort
    Hamburg
    Alter
    42
    Beiträge
    1.013
    hi genau banksel wechselt in die jeweilige bank der angegebenen adresse
    ADCON1 (876) ist um die ADC Eingänge auch Digitale I/O umzuschalten ich glaub beim 628a heißen die nur adcon.

    ja du kannst nen Debugger benutzen um das verhalten zu testen ich benutze dafür gpsim bei mplab ist aber auch was bei.
    Legastheniker on Bord !

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    06.06.2007
    Ort
    Aurich
    Beiträge
    36
    naja, soweit ich das sehe ist der richtig initalisiert, du solltest die eingänge also nutzen können...

    Ich verstehe aber noch nicht ganz wie du einen wert an den porta schreiben willst, in das register kannst du ja nicht schreiben (sollte zumindest keinen effekt haben da inputs)
    Simulieren kann man sehr gut mit dem PIC SIMULATOR IDE ==>http://oshonsoft.com/pic.html

    Ich persönlich würde aber niemandem einen PIC16F.... empfehlen! ===> Ein PIC18F.... hat schon lineare adressierung (also nix mehr mit Banksel)
    Irgendwas ist immer...

  7. #7
    Moin

    Ich verstehe aber noch nicht ganz wie du einen wert an den porta schreiben willst
    Das ist ja eben mein Problem.Ich würde dem Code gerne vorflunkern das ein Pegel anliegt. Damit könnte ich erkennen ob der Code richtig arbeitet.

    Beispiel:

    An PortA RAxy simuliere ich ein High-Signal. Dieses High würde ich dann mit der Adresse XY Bit yx vergleichen. Wenn beide gleich dann mache weiter, wenn nicht springe ins Unterprogramm. So soll dann per anliegenden Pegel verschiedene Unterfunktionen aufgerufen werden.

    Den Simulator werde ich mal ausprobieren

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    06.06.2007
    Ort
    Aurich
    Beiträge
    36
    joa, mit dem simulator kann man das auf jeden fall testen, ansonsten musst du den port vorübergehend als Output einstellen damit du in das register schreiben kannst...
    letzte möglichkeit wäre natürlich das ganze soweit aufzubauen das du das mit hardware testen kannst...
    Irgendwas ist immer...

  9. #9
    Hallo

    Hier jetzt mal der gesamte Code. Sagt mir doch bitte ob darin ein nennenswerter Fehler ist:

    Code:
    ; PIC auswaehlen
        list p=16f628a 
    
    ; Include Datei fuer PIC	
        #include <p16f628a.inc>
    
    ; Config Word
        __config _MCLRE_ON & _PWRTE_OFF & _XT_OSC & _WDT_OFF
    
    
    
    ; Comperator deaktivieren durch das schreiben vom Wert 0x07h in das CMCON Register
    ; Dadurch koennen die Comperatoreingaenge als digitale Eingaenge benutzt werden
        ; Um Fehler zu vermeiden wird die Bank 1 explicit ausgewaehlt
        BANKSEL CMCON
    
        MOVLW b'00000111'
        ; Inhalt Arbeitsregister W nach Register CMCON schreiben (1Fh)
        MOVWF 1Fh	
    
        ; Mit BANKSEL automatisch in die Bank mit dem Register TRISA wechseln 
        BANKSEL TRISA
      
        ; Von PORTA die Ports RA0-RA4 auf Input schalten ( 1=In 0=Out )
        MOVLW B'00011111'	
    
        ; Wert aus Arbeitsregister W nach TRISA schreiben
        MOVWF TRISA	
    
        ; Von PORTB die Ports RB0-RB5, RB7 auf Input und RB6 auf Output
        MOVLW B'10111111'
    
        ; Wert aus Arbeitsregister W nach TRISB schreiben
        MOVWF TRISB
    
        ; Mit BANKSEL automatisch in die Bankmit dem Register PORTA und PORTB wechseln
        BANKSEL PORTA
    
        ; Pinne an PORTA mit dem Wert 0h loeschen
        CLRF PORTA
    
        ;Pinne an PORTB mit dem Wert 0h loeschen
        CLRF PORTB
    Habe ich bis hierhin alles richtig gemacht?

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    06.06.2007
    Ort
    Aurich
    Beiträge
    36
    ja, hast du! da ich noch ein paar zeichen fehlen...

    Bisher kann ich in dem quellcode keinen fehler entdecken.
    Irgendwas ist immer...

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

12V Akku bauen