-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: 16f628a - RB4 permanent auf "0": Warum?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    20.11.2007
    Beiträge
    24

    16f628a - RB4 permanent auf "0": Warum?

    Anzeige

    Hallo,
    ich beschäftige mich erst seit kurzem mit den PIC controllern, hab aber schon einige vortschritte verzeichnen können. Nun hat mich aber ein sehr komischer Fehler wieder zurück geworfen: Ich arbeite mit dem 16f628a und Mplab, also Assambler. Mein Code ist sehr einfach gestrickt, er soll einfach nur alle I/O von PortB auf "1" schalten. Dies machte er auch im prinzip, außer an Pin RB4. Dort ist, egal was ich mache, immer eine "0". Und dass auch noch bei zwei verschiedenen Controllern. Frag mich echt warum.... kann mir einer helfen, bzw. hatte jemand ein ähnliches Problem und kann sich vorstellen woran es liegen könnte? Dachte mir ja eigentlich am Code, da es ja beide betrifft oder an meiner versuchsplatine. Aber der Code is so einfach (und hat ja auhc schon vor ein paar tagen wunderbar funktioniert) und bei der Platine liegt Pin 4 blank (also keinerlei beschaltung). Ich bin verzweifelt ....
    Es war bis hierhin so schön
    liebe grüße Kante

    Code:
    Code:
    list p=16f628a
    #include <p16f628a.inc>
    
    	org	0x000
    	goto _main
    
    _main
    	bcf		STATUS, 5
    	bcf		STATUS, 6
    	movlw	B'00000000'
    	movwf	INTCON
    
    	bsf		STATUS, 5
    	movlw	B'00000000'
    	movwf	TRISB
    
    	bcf		STATUS, 5
    	movlw	B'11111111'
    	movwf	PORTB
    
    	end
    [/code]

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.10.2007
    Ort
    Bayern
    Alter
    29
    Beiträge
    116
    Hi

    Es wäre schön wenn Du für STATUS,5 -> STATUS,RP0 schreibst, dann erkennt man gleich das damit die Bankumschaltung gemeint ist.

    Was bei dir noch fehlt ist dei Endlosschleife. Vor end einfach noch goto _main schreiben.

    mfg
    Benny

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.02.2006
    Alter
    53
    Beiträge
    114
    Füge doch mal am Ende deines Codes eine Endlos-Schleife ein. Der Prozessor macht sonst einfach weiter mit dem Müll, der hinter deinem Programm steht.

    Also:
    Code:
    loop
           goto loop
    
            end
    Die "End" - Anweisung macht nämlich gar nichts. Man kann einen PIC nicht wirklich stoppen. Der rechnet immer weiter. Vielleicht liegts ja daran.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    20.11.2007
    Beiträge
    24
    Vielen Dank, das war mir neu. Werds heut nachmittag gleichma ausprobieren.
    Glaub zwar nicht wirklich daran, dass das die Ursache sein soll aber ein versuch ist es wert.
    Poste dann meine ergebnisse.
    kante

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    19.12.2005
    Ort
    Wang-Dong-Township
    Alter
    47
    Beiträge
    67
    Hi Kante!

    So ein ähnliches Problem mit dem RB4 hatte ich letzte Woche auch bei einem PIC 16F628, der zum 16F628A kompatibel ist.

    Bei denen ist herstellungsbedingt zunächst immer der LVP-Mode aktiviert.
    Als ich bei meinem Beispielprogramm in der CONFIG-Option noch

    __CONFIG [...] & _LVP_OFF

    reingeschrieben habe, ging es plötzlich wunschgemäß!

    Näheres speziell zu diesem Thema auf
    http://sprut.de/electronic/pic/config/config_emb.htm

    Gruß, Jan

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    20.11.2007
    Beiträge
    24
    Vielen dank.
    Der Tip von JayCool hats gebracht. Aber das bringt mich gleich auf ein anderes Thema, was ganz gut passt:
    Und zwar arbeite ich ja mit Mplab, jedoch läst sich bei mir dort nicht der _config-"befehl" benutzen. Ich kann ihn zwar angeben (am anfang des Programms anch "list" und #innclude) aber sobald ich dahinter einen Wert, egal ob hexadezimal oder binär, wert angebe spuckt der compiler mir
    diesen Fehler aus: Error[108] illeagal charakter('3') (bei "_config 3fa8"). Das selbe geschieht wenn ich die vordefinierten Konstanten benutze oder den Wert binär angebe.
    Hatte jemand schonmal das Problem?
    grüße Kante

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    19.12.2005
    Ort
    Wang-Dong-Township
    Alter
    47
    Beiträge
    67
    Hi,

    ich schätze, dass MPLAB nicht weiss, dass '3fa8' eine Hexadezimalzahl ist.
    Hast Du es stattdessen schonmal mit '0x3fa8' probiert?

    Ich würde aber empfehlen, die in der zugehörigen Include-Datei hinterlegten (für sich sprechenden) Konstanten zu verwenden. Siehe z.B. http://sprut.de/electronic/pic/config/config_emb.htm

    Das Assembler-File wird dadurch besser lesbar und die Fehlersuche gestaltet sich einfacher, weil man nicht erst das 14 Bit breite Config-Word auseinanderdröseln muss.

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.11.2007
    Ort
    Berlin
    Beiträge
    525
    Thema Übersichtlichkeit:

    warum benutzt Du nicht den BANKSEL Befehl

    Beispiel:

    movlw 0
    BANKSEL TRISB
    movwf TRISB

    BANKSEL PORTB
    bsf PORTB,RB4

    der Compiler erzeugt dann automatisch den gewünschtne Code
    für die Bankumschaltung um auf das entsprechende Register zuzugreifen.
    So kann es Dir eigentlich eagl sein in welcher Bank sich das Register
    befindet.

    um auf BANK 0 zu schalten, nehme ich gerne folgende Sequence
    clrf STATUS
    hier werden gleich beide RP0 und RP1 im Status Register gelöscht.


    Bei RB4 "MUSS" Low Voltage Programming unbedingt ausgeschaltet sein, sonst kannst Du den Pin nicht benutzen.

    _config sollte nie ganz links am Zeilenanfang stehen

    Hexwerte immer mit 0x anfangen z.B 0x3FFF usw.

    !! Vorab Hinweis: Böse Falle, wenn du den Pin RA4 benutzen willst, dieser Pin braucht unbedingt einen Pullup (Widerstand nach Plus). Sonst bekommst Du den Pin nie nach High gezogen. Hab ich auch vergessen und verzweifelt in meiner Software gesucht.

    mit freundliche Bits
    Bernd Siroyznski

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.10.2007
    Ort
    Bayern
    Alter
    29
    Beiträge
    116
    Hast Du auch 2x _ vorangeschfrieben?

    Nicht _CONFIG sonder
    __CONFIG

    mfg
    Benny
    cooming soon...

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    20.11.2007
    Beiträge
    24
    hey shooter,
    vielen Dank für den Tip, Hatte ich natürlich nicht gemacht und deshalb hats auch nicht gefunzt. Jetzt gehts. Super
    vielen Dank nochmal
    @Siro
    das mit dem Banksel werd ich mir mal angewöhnen. auch dir danke
    @JayCool
    mit den Konstatnen werd ich jetzt arbeiten, seit dem es endlich funktioniert

    Ihr seit super =D>

    Danke Kante

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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