Hallo Ich habe eine ATmega 328 Ein kleiner Test mit Bascom verwirrt mich etwas. wenn ich die $crystal = 1000000 in Bascom einstellt und mit speed = 500 folgende schleife laufen lasse blinkt diese im sec Takt Waitms Speed Led1 = 0 Waitms Speed Led1 = 1 das sollte so ok sein wenn ich aber die Fuse mit Basecom auslese ( in Bascom mit mk3 Prommer )wird 8MHz angezeigt auch eine Info im Datenblatt brachte das es mit 8MHz ausgeliefert wird und nicht mit 1MHz die default werte der Fuse habe ich bisher nicht geändert. auch zeigt Bascom im Prommer keine Möglichkeit 1MHz einzustellen sondern nur 128KHZ und 8MHz leider habe ich als Neuling noch keine weitere Erfahrung. habe ich im Datenblatt was falsch geglaubt zu sehen und Bascom zeigt den falschen wert ? danke für die Infos Hugo G
Das $crystal stellt nichts am Quarz um, sondern er sagt dem Compiler nur welchen Clock der AVR tatsächlich hat, damit die Berechnungen für delay etc stimmen. Der Compiler weiß ja nicht wie der Takt des µCs ist. Über die Fuses stellst du ein ob du den internen 128 khz oder 8MHz oszillator nehmen willst, oder eben einen externen mit einer beliebigen Frequenz. Die 1 MHz bekommst du indem du das CKDIV8 bit enablest. Dann wird der 8 MHz takt (oder der externe Takt mit x-MHz) durch 8 geteilt und du erhältst in diesem Fall deine 1 MHz.
Hugo.G schrieb: > auch eine Info im Datenblatt brachte das es mit 8MHz ausgeliefert wird > und nicht mit 1MHz > die default werte der Fuse habe ich bisher nicht geändert. Dann schau dir im Datenblatt die Bedeutung der Fuse CKDIV8 an.
Hallo danke für die Infos Ich habe mal Im Datenblatt unter CKDIV8 nachgeschaut wenn ichs richtig verstanden habe läuft der per default immer mit 8 MHz und CKDIV8 ist gesetzt so dass der Takt durch 8 geteilt wird. Das im Bascom ist klar dort wird nur der takt angegeben damit es den richtigen Teiler ermitteln kann. Die 8MHz werden daher auch in der Brennsoft von Bascom angezeigt. Wenn ich jetzt das CKDIV8 bit lösche sollte er mit 8MHz laufen. momentan ist mir noch unklar wo ich das ckdiv8 bit löschen kann. Beim Bascom Brennprog habe ichs unter den fuse nicht gefunden, einfach probieren trau ich mich im Moment noch nicht da ich nur einen Chip habe der bei falscher fuse eventuell nicht mehr erreichbar ist. geht das mit der bascom Software vielleicht gar nicht ? mfg Hugo
Hugo.G schrieb: > momentan ist mir noch unklar wo ich das ckdiv8 bit löschen kann. Schau dir mal das Brenn-Dialogfenster genau an.
Hugo.G schrieb: > Ich habe mal Im Datenblatt unter CKDIV8 nachgeschaut > wenn ichs richtig verstanden habe läuft der per default immer > mit 8 MHz und CKDIV8 ist gesetzt so dass der Takt durch 8 > geteilt wird. > Das im Bascom ist klar dort wird nur der takt angegeben damit es den > richtigen Teiler ermitteln kann. > Die 8MHz werden daher auch in der Brennsoft von Bascom angezeigt. Genau so ist es! Habe mit der Bascom Software noch nie gearbeitet, aber es würde mich sehr wundern wenn man da nicht auch die Fuses umstellen kann.
Klar geht das mit Bascom: http://www.rn-wissen.de/index.php/Bascom_-_Erstes_Programm_in_den_AVR_Controller_%C3%BCbertragen
Hallo Klar kann man die Fuse im Bascom Prog ändern. ich habe ich unter KLA987 100010 int RC OSC 8MHz ( ist der Default Wert ) folgende sind auch noch da 000010 int RC OSC 8MHz 010010 int RC OSC 8MHz Ich habe nur noch nicht gefunden welcher der richtige ist. Das Bit CKDIV8 ist nicht direkt dort zu finden Bin noch auf der suche, ich will ihn ich schrotten. mfg Hugo
Hallo ich habe gerade gesehen man kann per Software auch den Clock-Prescaler der beim starten vom atmega gesetzt wird ändern. das wäre nicht so gefärlich. mfg hugo
Hallo das geht super einfach folgendes am Anfang vom Prog einfügen und er leuft mit 8 MHz !LDI R16, &b10000000 !LDI R17, &b00000000 '''''''''''''''''' set clock prescaler to 1 !OUT CLKPR, R16 !OUT CLKPR, R17 Die Fuse wird zwar nicht verändert und das programm wird um ein par bytes größer man hat aber kein Risiko beim probieren. Danke für den Tip mit der Seite mfg Hugo
Hallo Danke Timmo H. Habs probiert geht prima Fusebit C: divide clock by 8 disabled Beide Lösungen gehen bei mir Nochmal danke für die Tips mfg Hugo
Hugo.G schrieb: > ich habe gerade gesehen man kann per Software auch den Clock-Prescaler > der beim starten vom atmega gesetzt wird ändern. > das wäre nicht so gefärlich. Richtig, das ist unbedingt zu empfehlen! Grade wenn man kaum Erfahrung mit dem Setzen von Fusebits hat, sollte man den Takt möglichst über den Clock-Prescaler einstellen. Das geht problemlos per Software, und man hat sogar eine viel Größere Auswahl an Taktfrequenzen. Man braucht dazu lediglich ein paar Zeilen am Programmanfang, die sich um die Einstellung des Prescalers kümmern: das Register CLKPR muss auf eine bestimmte Art beschrieben werden. Beispiel für Teilen durch 8 (Ergebnis dann 1 MHz):
1 | ldi temp,(1<<CLKPCE) |
2 | out CLKPR,temp |
3 | ldi temp,0b00000011 ; CPU-Prescaler 8 |
4 | out CLKPR,temp |
Anders Beispiel für Teilen durch 256 (Ergebnis dann 31,25 kHz):
1 | ldi temp,(1<<CLKPCE) |
2 | out CLKPR,temp |
3 | ldi temp,0b00001000 ; CPU-Prescaler 256 |
4 | out CLKPR,temp |
In Bascom schaut der Syntax natürlich dann ein bisschen anders aus, aber das kriegst du locker hin. Alles Weitere steht im Datenblatt des ATmega328, Kapitel 9.12.2, Seite 38.
Hi, Markus Weber schrieb: > In Bascom schaut der Syntax natürlich dann ein bisschen anders aus, ja, "gänzlich" anders, nämlich mit jeweils einem $asm davor und $end asm danach ;-) Oder einfach Edit: CLKPR = &b10000000 CLKPR = &b00000011 Gruß, Norbert
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.