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
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]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
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
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:
Die "End" - Anweisung macht nämlich gar nichts. Man kann einen PIC nicht wirklich stoppen. Der rechnet immer weiter. Vielleicht liegts ja daran.Code:loop goto loop end
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
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
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
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.
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
Hast Du auch 2x _ vorangeschfrieben?
Nicht _CONFIG sonder
__CONFIG
mfg
Benny
cooming soon...
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
Lesezeichen