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
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)
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
hallo Mathias schau mal hier nach ist nur ein beispiel www.mikrocontroller.net/topic/18808#postform vielleicht hifts ein wenig weiter mfg kay
...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
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.
1 | ldi temp, 0b00000010 ; TOIE0: Interrupt bei Timer Overflow |
dann klappt's auch mit dem 8515er...
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
Argh! Kleines Detail überlesen... sorry! Na ja... wenn du den anderen Code auf deinem Controller ausführen willst, geht das jetzt auch ;)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.