AVR - Ich verzweifle

Liebe Newsgroup,

ich verzweifele bei meinen ersten Gehversuchen mit dem AVR. Ich möchte einfach nur den Ausgang PD5 bei jedem Programmdurchlauf invertieren. Leider läuft das Programm gar nicht. Ich habe das kurze Programm eingefügt. Sieht jemand den Fehler???

Grüße aus München,

Christian

.INCLUDE "8515def.inc"

.def temp = r16

.equ LED = PA0 .equ WDOG = PD5

.dseg .org 0x60

temp_wdog: .byte 1 ;

; Prgrammbeginn, Interrupt-Vektoren ; --------------------------------- ; .cseg . org 0x0000 rjmp main ;Programmstart

main: rcall Init

main_loop: rcall Watchdog cbi PORTA, LED rjmp main_loop

Init: ldi temp, 0b00100000 ;alle Ausgänge auf Ausgang Schalten (PORTD) out DDRD,temp

ldi temp, 0b00000001 ;alle Ausgänge auf Ausgang Schalten (PORTA) out DDRA,temp

ret

Watchdog: lds R18,temp_wdog bst R18,1 ;Bit 1 aus Register in T-Flag schreiben brtc Watchdog_clr ;Springe wenn 0 ldi R18,0x00 sts temp_wdog,R18 ;wenn nicht 0 dann lade 0 sbi PORTD, WDOG ;Ausgang triggern ret

Watchdog_clr: cbi PORTD, WDOG ;Ausgang triggern ldi R18,0xFF sts temp_wdog,R18 ;wenn nicht 0 dann lade 0 ret

Reply to
Christian Sander
Loading thread data ...

So, wie ich es hier auf die Schnelle sehe, hast Du den Stack nicht initialisiert. Das sollte gleich die allerste Anweiung nach dem Reset sein. Sonst funktioniert kein rcall...

Gruß Rolf

Reply to
Rolf Bredemeier

Ich spreche mal für meine Erfahrungen, welche sich aber "nur" um 2313 und ATtiny15 drehen.

Allgemein ist zu sagen, dass ich bewusst in meinen ersten Gehversuchen auf irgendwelche Watchdog-Geschichten verzichtet habe, da man dort schnell Fehler machen kann. Am besten erstmal abschalten.

Diese Routine würde ich ein wenig anders gestalten:

main_loop: in temp, pina ; Aktuelle Werte einlesen com temp ; Werte invertieren out porta, temp ; Werte ausgeben rjmp main_loop

Wenn Du Dir sicher bist, dass r16 (alias temp) nicht in dieser Schleife nicht noch anderweitig genutzt wird, kannst Du auch die Zeile "in temp, pina" weglassen.

Zum Sinn der Routine:

- "in" liest mir die Werte des Ports A auf mein R16 (PINA könnte in diesem einfachen Fall auch durch PORTA ersetzt werden, aber: die Daten für PORTA kommen aus dem Speicher, die von PINA von der Peripherie)

- "com" invertiert alle Bits im Register (kann Probleme geben, da alle pins, die nicht als "Ausgang" definiert werden, dann jeweils den Pull-Up einschalten und ausschalten und einschalten und aus.....)

- "out" setzt die Ports wieder.

Versuchs mal und gib ein Feedback, Viele Grüße, Michael

Reply to
Michael

Danke Rolf, das mit dem SP stimmte. Deshalb lief es gar nicht.

Die LED ist eine Anzeige, und hat mit dem Watchdog nichts zu tun. Der befindet sich auf PD5. Ich dachte mit ich belege ein Register mit

00 und abwechselnd ff und Teste dann das T-Flag.

Zu Deiner Routine. Würde ich nicht mit out PORTA alle Pints des PORTs ansprechen?

Gruß,

Christian

pins,

Reply to
Christian Sander

Tut mir leid, an diese Möglichkeit dachte ich garnicht...

War nur ein Tipp meinerseits. Bei ersten Gehversuchen würde ich alles weglassen, was nicht benötigt wird. Aber wenn es dennoch klappt: Herzlichen Glückwunsch!

Ja würdest Du. Bei ersten Gehversuchen ist das sogar legitim... Es ging ja nur darum, das ganze zum Laufen zu bringen, oder irre ich mich da? ich habe das anfangs immer so gemacht und es hat wunderbar funktioniert.

Viele Grüße, Michael

Reply to
Michael

Hast ja recht. Bin ja dankbar für jeden Hinweis.

Bis hoffentlich zum nächsten Mal,

Christian

"Michael" schrieb im Newsbeitrag news:cdqjlb$fjc$01$ snipped-for-privacy@news.t-online.com...

Herzlichen

habe

Reply to
Christian Sander

was häst du von der Variante das dein Programm funktioniert, du aber von dem Ergebniss nichts siehst da du das blinken mit mehreren hundert KHZ einfach nicht siehst. Also einfach mal eine Warteschleife in deine "main_loop" Wenn du mit dem AVR Studio entwickelst kannst du dir die Register und die Ports im Simulator ansehen.

Gruss Jürgen

>
Reply to
Jürgen Bott

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.