Forum: Mikrocontroller und Digitale Elektronik ATMEGA8515, PWM-Beispiel aus dem Wiki funktioniert nicht?


von Mathias (Gast)


Lesenswert?

Hallo Forum!

Ich habe jetzt gut 3 Stunden im Forum verbracht und trotz x ähnlicher 
Themen immer noch keine Lösung für mein Problem gefunden.

Umgebung: AVR Studio 4.12, STK500 mit ATMEGA8515L

Ich wollte das Software-PWM-Beispiel (Assembler) im Wiki 
(http://www.mikrocontroller.net/articles/AVR-Tutorial:_PWM) probieren 
und scheitere immer wieder daran.

Anstelle der im Wiki beschriebenen m8def.inc include ich die für diesen 
Prozessor nötige m8515def.inc.

Problem: Die LED's des STK500 leuchten immer auf "volle Kraft". Auch mit 
"externen" LEDs dasselbe Spiel.

Ist der Prozessor für dieses Beispiel zu schnell?
Vielleicht irgendwas an den Fuse-Bits? (Nur geraten, habe ich irgendwo 
hier aufgeschnappt.)

Ich danke Euch für Eure Geduld und Hilfe.

Vorweihnachtliche Grüße,
Mathias

von Karl H. (kbuchegg)


Lesenswert?

Wohl eher irgendwelche Steuerbits  bei den Timern, die
beim Mega8515 in anderen Registern untergebracht sind.

Da hilft nur eines: Datenblat raus und nachsehen ob
beim Mega8515 die benötigten Bits auch in denselben
Registern untergebracht sind (und eventuell mit
dem Datenblatt des Mega8 vergleichen, ob sie auch
dasselbe bewirken)

von Kai G. (runtimeterror)


Lesenswert?

Wirf das Programm mal im Simulator an, ob dir das Aufschluss über die 
Ursache gibt.

Breakpoints in die Timer-Routinen, etc.

LEDs am richtigen Port?

Vielleicht habe ich heute Abend Zeit das mal zu testen... jetzt aber 
erstmal Weihnachtsmarkt!

Gruß

Kai

von Kay B. (newbie)


Lesenswert?

hallo Mathias
schau mal hier nach ist nur ein beispiel
www.mikrocontroller.net/topic/18808#postform
vielleicht hifts ein wenig weiter

mfg
kay

von Mathias (Gast)


Lesenswert?

...gut, ich bin nicht doof aber ich versteh' Bahnhof.

Klar, war lesen kann ist klar im Vorteil aber dafür verstehe ich die 
Materie nicht mal gut genau um zu wissen, woran ich erkenne, wonach ich 
suche.

Vielleicht irgendjemand hier, der dasselbe Problem hat(te)?

Ich hab hier noch nen ATMEGA16, mal gucken, was der sagt...

Danke erstmal, Karl-Heinz

von Mathias (Gast)


Lesenswert?

Hallo Kai, hallo Kay ;)

Die Leds sind am richtigen Port.
Leider hilft mir der Simulator nicht wirklich weiter.

Den Link lese ich mir heute Abend mal durch und gebe nochmal 
Rückmeldung.

Danke erstmal.

von Buschwindröschen (Gast)


Lesenswert?

1
ldi     temp, 0b00000010      ; TOIE0: Interrupt bei Timer Overflow

dann klappt's auch mit dem 8515er...

von Kai G. (runtimeterror)


Lesenswert?

Eigentlich ganz einfach:

- Stell mal den Simulator auf ATmega8515
- Cursor auf "main:"
- "Run to Cursor" Strg+F10

zu dem Zeitpunkt hat der schon alle Einstellungen gemacht

Klapp mal TIMER_COUNTER_1/TCCR1A und TIMER_COUNTER_1/TCCR1B in der 
I/O-View auf. Zudem PORTA bis PORTD. Man erkennt z.B., dass PINB1 als 
Ausgang definiert wurde.

Wir mogeln jetzt etwas:
- Schalt mal CS12 aus und dafür CS10 ein.

Das beschleunigt den Timer um Faktor 256, was das Debugging um eben die 
selbe Zeit verkürzt ;)

Wenn du jetzt den Autostep-Modus (Alt+F5) startest, dann siehst du, dass 
der Timer losrennt. Während wir jetzt gespannt darauf warten, dass PINB1 
auf High gesetzt wird passiert was anderes: PIND5 geht auf High!

Ein flüchtiger Blick ins Datenblatt sagt auch warum: auf dem ATmega8 ist 
OC1 = PB1 (wie im Wiki-Code angegeben), auf dem ATmega8515(L) allerdings 
ist OC1 = PD5!
Ändere den unteren Teil einfach wie folgt ab:
1
    ; Den Pin OC1A zu guter letzt noch auf Ausgang schalten
2
    ldi      temp1, 1 << PORTD5 ; Die Notation ist lesbarer,  0b00100000 ist auch gut.
3
    out      DDRD, temp1
und schließ die LEDs an Port D an.

Leider funktioniert das dann in der Simulation immer noch nicht richtig, 
obwohl es das meiner Meinung nach sollte:
1
;     WGM13    WGM12   WGM11    WGM10
2
;      1        1       1        0

Eigentlich sollte der Counter (TCNT1) bis ICR1H laufen... er läuft aber 
nur bis OCR1A ... was nur bei WGM10 = 1 passieren sollte (Seite 121, 
Tabelle 53). Setze ich im Simulator das Bit, so zählt er höher (0x3FFF), 
aber auch nicht bis ICR1.

Vielleicht kann das jemand anderes erklären, ich habe mit den meisten 
PWM-Modi noch nichts gemacht. Müsste ich selber nachlesen.

Hoffe, das hilft dir weiter

Gruß

Kai

von Kai G. (runtimeterror)


Lesenswert?

Argh! Kleines Detail überlesen... sorry!

Na ja... wenn du den anderen Code auf deinem Controller ausführen 
willst, geht das jetzt auch ;)

von Mathias (Gast)


Lesenswert?

Hallo und vielen, vielen Dank für die Hilfe.
Ich hatte zwar mit dem zweiten Programm probiert aber es geht ja ums 
Prinzip an sich. Ich selbst hätte mich im Datenblatt wundgelesen. ;)

Ich probiere am WE nochmal mit dem 8515 und gebe Feedback. Nochmals 
danke für die schnelle Hilfe.

Gruß,
Mathias

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.