Hi,
ich bin blutiger Anfänger was die Programmierung von AVR Chips angeht
und wollte fragen ob es eine gesammelte Quelle an aufbereiteten
Informationen gibt. Ich kenne das beispielsweise vom Pi Pico als SDK,
oder, wenn auch ein etwas anderer Usecase, von der JAVA APi. Ich frage,
weil ich jetzt schon seit über einer Stunde daran scheitere, einen
simplen Timerinterrupt zum laufen zu bekommen. Ja, die Daten stehen im
Datenblatt, aber das ist ja nicht wirklich anfängerfreundlich zu lesen.
Tut mir leid, wenn das als blöde Frage gilt
Danke für eure Ratschläge
David P. schrieb:> Leider hab ich das nicht zum laufen bekommen.
Wenn du weiterkommen willst dass müsstest du uns eben zeigen
was du schon gemacht hast und welche Probleme dabei auftauchen.
So richtig gute Hellseher sind wir hier alle nicht ....
David P. schrieb:> aber das ist ja nicht wirklich anfängerfreundlich zu lesen.
Wo ist denn das Problem?
Atmel-Datenblätter sind verhältnismäßig gut.
Vor allem ist es ein Dokument pro Chip-Gruppe; nicht wie bei STM32, wo
es ein Datenblatt, ein Reference- und ein Programming-Manual mit jeweils
zig-tausend Seiten gibt.
David P. schrieb:> die Daten stehen im Datenblatt,> aber das ist ja nicht wirklich anfängerfreundlich zu lesen.
Dur wirst keine "schöneren" Datenblätter finden, als die von AVR
Mikrocontroller.
> Dann suche ich etwas für "ein Schritt nach blutiger Anfänger"http://stefanfrings.de/mikrocontroller_buch/index.html
Die Timer sind allerdings schon recht komplex. Am besten fängst du erst
mal mit einfacheren Funktionen an, bis du mit dem Style des Datenblattes
vertraut bist. Mein "Buch" leitet dich dazu an.
Das ist der Code, den ich mir aus dem Internet zusammengesucht habe.
Wenn ich das richtig verstehe, sollte die LED, die an PD1 angeschlossen
ist jetzt schnell blinken oder "halbhell" leuchte, allerdings bleibt sie
aus.
STK500-Besitzer schrieb:> das sollte wohl eherPORTD &= ~(1<<1);> heissen!
Hab ich geändert, aber da gar keine LED an geht, ist das wohl nicht das
Problem
S. Landolt schrieb:> Mal die Warnungen im Compiler ('-Wall') einschalten - bei mir kommt da> ein "... appears to be a misspelled signal handler ...".
1
ISR(TIMER0_OVF_vect){
Die Zeile hab ich geändert, entfernt die Warnung, tut sonst aber nichts
David P. schrieb:> Die Zeile hab ich geändert, entfernt die Warnung, tut sonst aber nichts
kannst du die LED auch ohne Timer ansteuern?
Einfach mal eine Endlosschleife in der die LED ein- und ausgeschaltet
wird.
Dazu dann noch ein paar Warteschleifen.
So kann man zumindest Hardware-Fehler ausschließen.
STK500-Besitzer schrieb:> David P. schrieb:>> Die Zeile hab ich geändert, entfernt die Warnung, tut sonst aber nichts>> kannst du die LED auch ohne Timer ansteuern?> Einfach mal eine Endlosschleife in der die LED ein- und ausgeschaltet> wird.> Dazu dann noch ein paar Warteschleifen.> So kann man zumindest Hardware-Fehler ausschließen.
Jap, das funktioniert. Dafür hatte ich die auskommentierte While
Schleife benutzt.
David P. schrieb:> #define F_CPU 128000L
Bist du sicher das das so richtig ist, auch wenn es nichts mit deinem
Problem zu tun hat?
Also du hast nun den Timer mit dem TIMER0A_OVF_vect Interrupt verwendet,
hier noch mal ein Bsp. mit TIMER0_COMPA_vect.
Den Pin musst halt auf den richtigen ändern.
Mitlerweile habe ich meinen Code soweit geändert. Die Anzgeige auf Port
d klappt, die auf PortA gar nicht und auf PortC die ersten 2 Bits.
Jemand ne idee, woran das liegen könnte?
David P. schrieb:> Mitlerweile habe ich meinen Code soweit geändert. Die Anzgeige auf Port> d klappt, die auf PortA gar nicht und auf PortC die ersten 2 Bits.> Jemand ne idee, woran das liegen könnte?
ja, Infos zu den Ports findest du im Datenblatt.
Da der Code ja inzwischen umfangreicher wird, solltest du ihn als Anhang
mitliefern.
Adam P. schrieb:> David P. schrieb:>> PORTA=stunden;>> Dann musst du halt auch mindestens 1 Std. warten.
Um das ganze zu testen, habe ich den CPU Takt erhöht, sollte also
deutlich weniger als ne stunde dauern
STK500-Besitzer schrieb:> Da der Code ja inzwischen umfangreicher wird, solltest du ihn als Anhang> mitliefern.
Mache ich in Zukunft.
S. Landolt schrieb:> PORTC2..5 wird von JTAG benutzt - ist das abgeschaltet?
Aber nicht das er nur ein JTAG Adapter (Kabel) hat, sonst wars das dann
mit wieder ändern.
S. Landolt schrieb:> Ist AVcc angeschlossen, d.h. mit Strom versorgt?
Man lernt nie aus...das wusst ich auch noch nicht.
Ich bin davon ausgegangen das AVcc lediglich für den Analog Teil ist,
nicht das es auch "grundsätzlich" den PORTA versorgt.
Edit:
AVCC is the supply voltage pin for Port F and the Analog-to-digital
Converter. It should be exter-
nally connected to VCC , even if the ADC is not used. If the ADC is
used, it should be connected
to V CC through a low-pass filter.
> Aber nicht das er nur ein JTAG Adapter (Kabel) hat,> sonst wars das dann mit wieder ändern.
Man muss ja nicht per Fuse abschalten, per Software (zu Programmbeginn)
geht auch.
S. Landolt schrieb:> Man muss ja nicht per Fuse abschalten, per Software (zu Programmbeginn)> geht auch.
Sollte das nicht mit dieser Zeile funktionieren?
S. Landolt schrieb:> "The application software must write this bit [JTD] to the desired value> twice within four cycles to change its value.
Ah danke, das muss ich überlesen haben.
Edit: Klappt, danke
David P. schrieb:> Adam P. schrieb:>> #define F_CPU 128000L>> steht doch für 128KHz oder?> Wenn ja, sollte es richtig sein.
Darf ich fragen, warum du den Controller so langsam laufen lässt?
Adam P. schrieb:> Darf ich fragen, warum du den Controller so langsam laufen lässt?
Zum Strom sparen. Ich wollte es mal so niedrig wie möglich probieren,
wenn das von der rechenleistung nicht reicht, kann ich ja immer noch
mehr nehmen
Da es hier offenbar um eine Uhr geht, uneingeschränkt: ja.
Aber auch sonst sehr oft, zumindest von der Verarbeitungskapazität her
gesehen; allerdings sind viele Peripherieeinheiten dann abgeschaltet.