Hallo, ich möchte mit einem Tiny25 eine NEC-Protocol FB auslesen und wollte zum Debuggen Daten per UART an den PC senden. Den UART wollte ich über das USI-Modul laufen lassen und habe frei nach der Atmel AppNote dafür ein Programm geschrieben. Drücke ich auf der FB eine Taste, kommen auch 68 Bytes (68 Flankenwechsel für ein FB kommando http://wiki.altium.com/display/ADOH/NEC+Infrared+Transmission+Protocol) am PC an, es stimmen jedoch nur die ersten zwei und ein paar letzte Bytes mit den erwarteten Werten überein. Also habe ich nachgeforscht und bin soweit gekommen, dass selbst wenn ich direkt ins UART/USI Ausgaberegister einen Wert schreibe, dieser falsch am PC ankommt (jedoch nur wenn zwichendurch die PCINT benützt wurde). Probehalber lasse ich per Timerinterrupt Daten in den Puffer schreiben und alles kommt richtig an. Auch habe ich verschiedene serielle Schnittstellen probiert und alle liefern das gleiche Ergebnis. Da ich nach 2 Tagen immer noch keine Lösung sehe/einen Fehler finde, möchte ich nun euch um Hilfe bitten. Der Code ist im Anhang. Danke für Hilfe. PS: Ich weiß das es Software UART gibt und ein fertiges FB-Tool, möchte ich jedoch nicht nutzen.
OK, ich glaube der Tiny is kaputt, ich habe jetzt einfach mal die Funktion der Timer überprüfen wollen und bei Folgendem Code kommt das erste Bild raus:
1 | .include "tn25def.inc" |
2 | |
3 | .def temp = r16 |
4 | .def tem2 = r17 |
5 | .def tem3 = r18 |
6 | .def tem4 = r19 |
7 | |
8 | .org 0x000 |
9 | RJMP RESET |
10 | RETI ;RJMP INT0 ;External Interrupt Request 0 |
11 | RETI ;RJMP PCINT ;Pin Change Interrupt Request 0 |
12 | RETI ;RJMP TIMER1_COMPA ;Timer/Counter1 Compare Match A |
13 | RJMP TIMER1_OVF ;Timer/Counter1 Overflow |
14 | RETI ;RJMP TIMER0_OVF ;Timer/Counter0 Overflow |
15 | RETI ;RJMP EE_RDY ;EEPROM Ready |
16 | RETI ;RJMP ANA_COMP ;Analog Comparator |
17 | RETI ;RJMP ADC_COMP ADC ;Conversion Complete |
18 | RETI ;RJMP TIMER1_COMPB ;Timer/Counter1 Compare Match B |
19 | RETI ;RJMP TIMER0_COMPA ;Timer/Counter0 Compare Match A |
20 | RETI ;RJMP TIMER0_COMPB ;Timer/Counter0 Compare Match B |
21 | RETI ;RJMP WDT Watchdog ;Time-out |
22 | RETI ;RJMP USI_START ;USI START |
23 | RETI ;RJMP USI_OVF ;USI Overflow |
24 | |
25 | RESET: |
26 | LDI temp, HIGH(RAMEND) |
27 | OUT SPH, temp |
28 | LDI temp, LOW(RAMEND) ; Stackpointer initialisieren |
29 | OUT SPL, temp |
30 | |
31 | LDI temp, (1<<TOIE1) |
32 | OUT TIMSK, temp ;T/C0 COMPA INT |
33 | |
34 | LDI temp, (1<<CS13) | (1<<CS11) |
35 | OUT TCCR1, temp ;T/C1 PSK = 512 |
36 | |
37 | LDI temp, 0b11111111 |
38 | OUT PORTB, temp |
39 | |
40 | LDI temp, 0b00000110 |
41 | OUT DDRB, temp |
42 | |
43 | SEI |
44 | |
45 | |
46 | MAIN: |
47 | RJMP MAIN |
48 | |
49 | TIMER1_OVF: |
50 | PUSH temp |
51 | IN temp, SREG |
52 | PUSH temp |
53 | ; PUSH tem2 |
54 | |
55 | IN temp, PORTB |
56 | LDI tem2, 0xFF |
57 | SBRC temp, 2 |
58 | LDI tem2, 0b11111011 |
59 | OUT PORTB, tem2 |
60 | RETI |
61 | |
62 | ; POP tem2 |
63 | POP temp |
64 | OUT SREG, temp |
65 | POP temp |
66 | RETI |
Lass ich jetzt in der Timer ISR auch tem2 auf den Stack, kommt das zweite Bild raus. Übersehe ich irgend etwas, oder macht der Tiny wirklich groben mist?!
Hi >Lass ich jetzt in der Timer ISR auch tem2 auf den Stack, kommt das >zweite Bild raus. Übersehe ich irgend etwas, oder macht der Tiny >wirklich groben mist?! Nö, den machst du. Du hast zwei Returns in deiner ISR. und bei beiden wird unterschiedlich 'gepopt'. Mach einen Aussprungpunkt in deiner ISR und dann klappt das auch. Den Pin kannst du übrigens mit out PINB, 1<<PB2 viel einfacher ohne Abfrage tooglen. MfG Spess
Ach F***, es sind immer diese blöden Sachen die einen dann an den rand der Verzweiflung bringen. Dankeschön für den freundlichen Hinweis. Kann der Tiny25 schon toggeln??? Dachte der wäre noch von der alten Generation die das noch nicht können.
Hi Da habe ich wohl vergessen einen Beitrag abzuschicken: out PINB, 1<<PB2 ist natürlich Unsinn -> sbi PINB,PB2 MfG Spess
War mir schon klar, dass du SBI gemeint hast, ich hatte ja extra im Datenblatt gesucht ob er Toggeln kann (man is ja faul wann immer es geht ;-) nur habe ich auf die schnelle nix gefunden gehabt und bin dementsprechend dann den umständlichen Weg gegangen. Würde das ver*** AVR Studio nicht dauernd abstürzen wäre ich wahrscheinlich auch schon weiter...
Hi >Würde das ver*** AVR Studio nicht dauernd abstürzen wäre ich >wahrscheinlich auch schon weiter... Welches hast du denn? Für Assembler lohnt sich das 5er Studio nicht. MfG Spess
Ne, is das 4.19. Immer wenn ich es starte läuft es. Öffne ich ein Projekt ist zu 95% der TaskManager gefragt. Läuft das Projekt und ich will paar Einstellungen im Simulator machen ist auch Feierabend. Ich habs jetzt gerade noch mal neu installiert (dürfte jetzt die dritte sein). Mal schauen obs jetzt besser ist.
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.

