Forum: Mikrocontroller und Digitale Elektronik sekundentakt mega16


von Torsten (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich wollte den im Forum gefundenen Code der für einen mega8
geschrieben ist für meinen mega16 anpassen.
also habe ich .include"m8def.inc" in .include"m16def.inc"
geändert.
dann die entsprechende Frequenz eingetragen
.equ  xtal  = 16000000
als nächstes im AVR Studio mit Build F7 auf Fehler getestet
Hier bekomme ich jetzt folgende Fehlermeldungen

C:\Programme\Atmel\AVR Tools\AvrStudio4\timer1.asm(34) : warning:
Immediate byte operand out of range
C:\Programme\Atmel\AVR Tools\AvrStudio4\timer1.asm(64) : warning:
Immediate byte operand out of range
Program memory usage:
Code             :   41 words
Constants (dw/db):    0 words
Unused           :   11 words
Total            :   52 words
Assembly complete with no errors.
Deleting   'C:\Programme\Atmel\AVR Tools\AvrStudio4\timer1.eep'


Wenn ich den wert von ".equ  debounce = 256" auf 255 ändere bekomme
ich keine Fehlermeldung mehr aber damit dürfte ein Sekundengenauer Takt
nicht mehr funktionieren.
Ich habe zur Kontrolle an PIN 1 (PB0)eine LED angschlossen
wie kann ich diese in den Code einbinden damit sie im Sekundentakt
leuchtet?

von Jens Renner (Gast)


Lesenswert?

Hab' mir den Code nicht genau angesehen, aber debounce dient doch
lediglich der Tastenentprellung, denke ich.

von Torsten (Gast)


Lesenswert?

soweit ich den code verstanden habe wird mit debounce ein wert
festgelegt der für die Berechnung des Comparewertes OCR1A
benötigt.
hier die originalerklärung
Als Beispiel wird 11,0592MHz gewählt, welches ein übliches
Baudratenquarz ist, d.h. damit können die UART Standardbautraten
erzeugt werden.
Der Softwareteiler wird mit 256 gewählt und kann somit nur mit einem
einzigen Byte realisiert werden. Für größere Werte muß der
Softwareteiler als int (2 Byte) deklariert werden. Bei kleineren Werten
als 256 muß man beachten, daß der 2.Faktor immer noch in 2 Byte paßt, um
als Comparewert für T1 verwendet zu werden.

Mit 256Hz ergibt sich eine Timerinterruptzeit von 4ms, die auch sehr
gut zum Entprellen von Tasten benutzt werden kann. Eine Entprellroutine
kann also bequem in den Timerinterrupt mit eingefügt werden
ende des Zitates

als demnach wird 265 als wert für den softwareteiler verwendet
und wenn ich diesen wert ändere ist der sekundentakt nicht mehr genau
oder??

von Torsten (Gast)


Lesenswert?

hier der Originalbetrag aus dem Forum

http://www.mikrocontroller.net/forum/read-4-57760.html

von Torsten (Gast)


Lesenswert?

hallo
ist denn hier keiner der sich damit auskennt?
Es sind bestimmt Anfängerfehler die ich mache

mfg torsten

von AxelR. (Gast)


Lesenswert?

ldi prescaler, debounce
lade Register R18 mit 256.
kann ja sein, dass Peter's Compiler in früheren Versionen nicht
gemeckert hat, aber wenn man in ein Register 256 schreibt, kommt man
vielleicht auf eins oder so...? Ich weiss jedenfalls nicht, was mit dem
9ten bit passiert, jedenfalls gibt es einen Überlauf.
Gruß
Axel

von Torsten (Gast)


Lesenswert?

hi Axel,

kann ich den Code so verwenden oder muss angpasst werden
und wenn schon mal jemand antwortet den zweiten Teil meiner Frage
betreffend ich habe an PIN 1 PB0 ein Led inkl. Vorwiederstand an VCC
wie kann ich den Sekundentakt ausgeben?

mfg Torsten

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.