Hallo, trotz tagelanger Fehlersuche bekomme ich keine RC5-Kommandos aus meinem ATmega32 heraus. Als Grundlage habe ich die AVR 410 genommen und auf 8MHz angepasst. Es scheint so als ob in der Routine "sample" irgend etwas mit der Synchronisation nicht richtig läuft weil "er" aus dieser Funktion nicht herauskommt. Der Sender funktioniert bei anderen RC5-Geräten einwandfrei. Oder kann es auch daran liegen das es mit diesem Prozessor nicht möglich ist? Danke für jeden Tip! MfG Bernd
Wo und mit welchem Wert initialisierst Du das Register "flipflop" ?
Und wie kommst Du in der Interruptroutine auf 8 MHz bei einem 4 MHz Quarz?
Hallo Dirk, gar nicht! Im ersten Durchlauf hat das Register eine 0x00 daraus wird dann 0xFF usw. Die geforderten 64µs werden somit eingehalten.
Dann lies zum Bsp. schon mal folgenden Thread. Beitrag "Register nach Reset nicht leer?" Sollte Dein Register "flipflops" ohne Initisalisierung nicht 0 sein, so wird Dein Sprungbefehl in der ISR immer den gleichen Weg gehen. Egal wie oft Du Ihn Komplementierst. Jeder Wert <>0 gibt als Komplemet <>0 Ich hab mir Deinen Routine noch nicht mal weiter angeschaut und weiss auch noch nicht, ob es das Problem ist aber setze als allererstes mal den Wert von flipflop am Anfang auf Wert 0. LDI flipflop, 0
er meint das du ein Register in dem du den Wert (hier 0) erwartest am Begin des Programms dieses auch mit dem Wert initialisierst. Ich meine im Datenblatt noch nicht's darüber gelesen zu haben, das der Wert aller Register r0..r31 nach einem Reset null ist. Sascha
Ok danke, habe verstanden, aber es hat leider nicht geholfen. Im Debug scheint das timing in Ordnung zu sein.
PortB = output ? ausgegeben auf DDRa ? hmmmm? SER temp //PortB = output OUT DDRa, temp//B, temp
Entschuldigung, habe zu spät bemerkt das ich diese Änderung nicht zurückgenommen habe. Hier mein geänderter Code. Danke Dirk!
woher weist du das es nicht funktioniert? wenn ich dein Programm sehe
1 | main: RCALL detect //Call RC5 detect routine |
2 | |
3 | CPI system, SYS_ADDR//Responds only at the spezified address |
4 | BRNE release //Branch if Not Equal (test the Zero flag) |
5 | |
6 | ANDI command, 0x3F //Remove control bit (Logical and Immediate) |
7 | //Performs the logical AND between the contents of |
8 | // register Rd and a constant and places the result |
9 | // in the destination register Rd. |
10 | OUT PortB, command |
11 | |
12 | RJMP main |
13 | release: |
14 | CLR command |
15 | //Clear PortB |
16 | OUT PortB, command |
17 | RJMP main |
dann wird doch eine erfolgreiche Ausgabe an Port B sofort wieder gelöscht. Sascha
Danke euch, darf ich euch noch einmal Montag ansprechen weil jetzt die Firma dicht macht? Vielen Dank! MfG Bernd
Was genau funktioniert denn nicht? DDRA vs. DDRB ist ja schon ein riesen Unterschied? Was tut er/es und was nicht? Mir ist der gesamte Aufbau dieser Routinen sehr suspekt, da das eigentlich Signal ausserhalb der ISR "gehandelt wird" und dann noch mit vollkommen unnötigen 31K250 ints/sec Dirk
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.