Hallo zusammen,
ich habe einen ATtiny414, welchen ich über UPDI programmiert habe. Das
Programm funktioniert auch, wenn ich über einen Debugger das Programm
starte (es wird ein I/O auf High gezogen und nach 10 Sekunden fällt er
auf Low zurück).
Wenn ich den Debugger nun abstecke und Spannung auf den Tiny gebe wird
das Programm aber nicht ausgeführt. Der Pin bleibt die ganze Zeit auf
Low.
Wie kommt das? Was macht der Debugger anders?
Vielen Dank für die Hilfe!
1
.def temp1 = r16
2
.def temp2 = r17
3
.def temp3 = r18
4
.def temp4 = r19
5
.def temp5 = r20
6
.def temp6 = r21
7
.def Timeout_M = r22 ; Timeout für die RTC (Minuten)
8
.def Timeout_S = r23 ; Timeout für die RTC (Sekunden)
Hallo,
ich habe da noch einen kleinen Tipp:
In RTC_Enable, kann man auch direkt
1
RTC_Enable:
2
ldstemp1,RTC_CTRLA
3
oritemp1,RTC_RTCEN_bm
4
;gleichwertig,pseudonym:
5
;SBRtemp1,RTC_RTCEN_bm
6
stsRTC_CTRLA,temp1
7
:
schreiben.
Daniel K. schrieb:> RTC_Enable:> lds temp1, RTC_CTRLA> ldi temp2, RTC_RTCEN_bm> or temp1, temp2> sts RTC_CTRLA, temp1>> ; Auf Sync warten> rcall RTC_WaitBusy> ret
siehe http://ww1.microchip.com/downloads/en/DeviceDoc/40001912A.pdf
8.7.3 Status Register
Und komplett:
37. Instruction Set Summary
Für alle 8 Bits im Status Register gibt es 1 Takt lange Befehle:
Carry: SEC / CLC
Negative Flag: SEN / CLN
Zero Flag: SEZ / CLZ
Global Interrupt: SEI / CLI
Signed Test: SES / CLS
Two’s Complement Overflow: SEV / CLV
T in SREG: SET / CLT
Half Carry Flag: SEH / CLH
Daniel K. schrieb:> ; Globale Interrupts aktivieren> lds temp1, CPU_SREG> ldi temp2, (0x01 << 0x07)> or temp1, temp2> sts CPU_SREG, temp1
Hallo Karl,
danke für die Anmerkungen :)
Kenne das sei() Makro bisher nur aus C. Wusste nicht, dass es auch in
Assembler verfügbar ist.
Der Pull-Up hat leider nichts gebracht. Der Tiny macht immer noch nichts
:(
Ok, der Fehler scheint wohl nicht am Mikrocontroller zu liegen, sondern
vielmehr macht die RTC ohne Debugger nicht das was sie soll (nämlich 10
Sekunden warten).
Statt 10 Sekunden sind es 10 ms. Da scheint noch was nicht richtig
gesetzt zu werden...
Edit:
Problem gelöst. Ohne Debugger wurde der Prescaler nicht richtig gesetzt.
Ich habe das Problem nun gelöst, indem ich vor dem Setzen noch auf einen
Sync warte, dann den Wert setze und dann noch einmal synchronisiere.
Nun funktioniert es.