Forum: Mikrocontroller und Digitale Elektronik Tiny25 USI-UART Problem


von Der D. (derdaniel)


Angehängte Dateien:

Lesenswert?

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.

von Der D. (derdaniel)


Angehängte Dateien:

Lesenswert?

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?!

von spess53 (Gast)


Lesenswert?

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

von Der D. (derdaniel)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

Hi

>Kann der Tiny25 schon toggeln???

Ja.

MfG Spess

von spess53 (Gast)


Lesenswert?

Hi

Da habe ich wohl vergessen einen Beitrag abzuschicken:

out PINB, 1<<PB2 ist natürlich Unsinn

-> sbi PINB,PB2

MfG Spess

von Der D. (derdaniel)


Lesenswert?

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...

von spess53 (Gast)


Lesenswert?

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

von Der D. (derdaniel)


Lesenswert?

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
Noch kein Account? Hier anmelden.