Autor |
Wait-Schleife |
|
|
|
|
BID = 405493
robodriver Stammposter
Beiträge: 217
|
|
Hallo Leute,
ich habe wieder mal ein Problem, welches ich mir nicht erklären kann.
ich habe folgenden einfachen Quellcode in BASCOM geschrieben:
Code : |
$regfile = "m8def.dat"
$crystal = 8000000
Ddrb = &B00000001
Ddrd = &B10000000
Ddrc = &B00000000
Portc = &B00000000
Portb = &B00000000
Portd = &B00000000
Gelb Alias Portb.0 'Gelbe LED
Set Gelb
Waitms 500
Reset Gelb
End
|
|
Der Chip hängt an einem externen 8MHz Quarz Oszillator. Habs auch mit meinem Messgerät nachgemessen und es wird mir 7,99 MHz angezeigt.
Wenn ich nun die Spannung einschalte dann lechtet meine Gelbe LED ziemlich genau 4 Sekunden. Das ist 8-mal so lange wie sie eigentlich sollte. Woran könnte das liegen? Gibt es irgendwie noch einen internen Takt-Teiler oder so?
Ich nutze einen ATMega8-16PU. Laut Datenblatt kann er 0-16MHz.
Kann sich jemand erklären warum er so langsam läuft? |
|
BID = 405499
perl Ehrenmitglied
Beiträge: 11110,1 Wohnort: Rheinbach
|
|
Zitat :
| Laut Datenblatt kann er | Du solltest das das Datenblatt ganz lesen, bevor du los programmierst und als erstes dann die benötigten Initialisierungen durchführen.
Dann wüsstest du nämlich, daß diese Prozessoren einen programmierbaren Oszillator-Vorteiler besitzen.
_________________
Haftungsausschluß:
Bei obigem Beitrag handelt es sich um meine private Meinung.
Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.
Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !
[ Diese Nachricht wurde geändert von: perl am 9 Feb 2007 16:54 ] |
|
BID = 405509
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Genau was perl sagen wollte: Sind die Fuses auch so programmiert, dass der externe Quarz als Taktquelle dient?
Siehe Datenblatt unter "System Clock".
_________________
|
BID = 405513
robodriver Stammposter
Beiträge: 217
|
Danke für die schnelle Antwort
Supi. Stimmt, hatte es vergessen. Hab auf externen Quarz umgestellt und schon gings. Zumindest mit dem einfachen Wait Befehl.
Bei dieser Schleife siehts schon wieder schlecht aus:
Set Gelb
For A = 0 To 500
Temp = Eingang
Writeeeprom Temp , A
Waitus 900
Next A
Reset Gelb
Für diese Schleife sollte er ungefähr ne halbe Sekunde benötigen. Sie läuft aber ganze 3,5 Sekunden.
Woran könnte das nun wieder liegen?
A ist als Long
Temp as Byte
Einganz Alias Pinc.5
Gelb wie gehabt
|
BID = 405525
DonComi Inventar
Beiträge: 8605 Wohnort: Amerika
|
Wenn du auch mal unter EEPROM im Datenblatt lesen würdest, würdest du lesen, dass es eine gewisse Zeit dauert, bis die Daten ins E²POM geschrieben wurden. Das kann pro Byte manchmal 10ms dauern...
Der Befehl wird dann wohl das Bit pollen, bis der Schreibvorgang abgeschlossen ist.
Leute, programmiert mehr nach Datenblättern und nicht nach fertigen Sachen in teils suboptimalen Sprachen.
_________________
[ Diese Nachricht wurde geändert von: DonComi am 9 Feb 2007 18:54 ]
Edit:
Klingt etwas fies... Ist aber nicht so gemeint gewesen.
[ Diese Nachricht wurde geändert von: DonComi am 9 Feb 2007 18:58 ]
|
BID = 405543
robodriver Stammposter
Beiträge: 217
|
Oh stimmt. ca 1ms bei 8 MHz daran lags. Jetzt gehts einwandfrei Wieder was dazu gelernt. Jetzt weiß ich auch gleich warum EEPROMS als Arbeitsspeicher ungeeignet sind
Vieln Dank an alle.
Ihr seid spitze!
Weiter so
|