PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anfänger braucht Hilfe bei Timer



uwe44k
24.02.2009, 17:12
Hallo,
ich erhoffe mir hier Hilfe. Ich probiere jetzt schon länger den Timer0 bei dem ATMega16 aus. Habe mir ein Beispielprogramm aus dem RolandWalter Buch heraus geschrieben.
Aber irgendwie funktioniert das nicht. Ich bin der Meinung das ich keinen Übersauf des Timers bekomme.

Hier mal meine Programm Routine:

Dim X As Byte

On Timer0 Ontimer0
Ddrc = &B01100000
Config Timer0 = Timer , Prescale = 1
Enable Timer0
Enable Interrupts

Cls

Do
Portc.6 = Not Portc.6
X = Timer0
Setfont Font8x8
Lcdat 4 , 18 , X
Waitms 500
Loop

Ontimer0:
Portc.5 = Not Portc.5
Return

vielleicht kann mir ja einer von euch helfen!

Gruß uwe44k

uwe44k
24.02.2009, 19:22
hey,
keiner eine Idee?

sorry für den Schreibfehler, das soll natürlich Überlauf heißen!

for_ro
24.02.2009, 20:09
Aber irgendwie funktioniert das nicht. Ich bin der Meinung das ich keinen Übersauf des Timers bekomme.

Warum glaubst du das? Hast du an PortC.5 oder PortC.6 eine LED oder sowas?
Das LCD wird es so wohl noch nicht tun.

Gruß

Rolf

uwe44k
24.02.2009, 20:40
hallo rolf,
ich hab an beiden ausgängen eine led. die led an portc.6 blinkt im angegebenen zeitabstand von 500 ms sowie sich das lcd in diesen 500 ms aktualisiert.
nur die led am port.6, da tut sich einfach nichts!

am lcd seh ich wie der timer zählt, abr nur in der 100er und 200er zahlen. also ich sehe nicht das er von 0-100 zählt und das kommt mir komisch vor.

gruß uwe

for_ro
24.02.2009, 21:15
ich hab an beiden ausgängen eine led. die led an portc.6 blinkt im angegebenen zeitabstand von 500 ms sowie sich das lcd in diesen 500 ms aktualisiert.
nur die led am port.6, da tut sich einfach nichts!


Welche blinkt jetzt, die an C.5 oder die an C.6?
An PortC.5 liegt der JTAG, der evtl. noch enabled ist. Den musst die über die Fuses abschalten.

Ansonsten ist das doch nicht dein ganzes Programm oder? Wie wird das LCD angesteuert?

Gruß

Rolf

uwe44k
24.02.2009, 21:31
erstmal danke das sich wenigstens einer meinen problem annimmt.

wie gesagt ich bin anfänger und mit dem jtag hab ich noch überhaupt nichts zu tun und weiß auch nicht wofür man den braucht.

hier mein ganzes Programm (sollte eigentlich total simel sein, aber ich verzweifel daran):
'--- Prozessor Daten ----------------------------------------------------------
$regfile = "m16def.dat"
$crystal = 8000000
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40
'--- genutzte libraries -------------------------------------------------------
$lib "glcdKS108.lib"
'--- Display konfigurieren ----------------------------------------------------
Config 1wire = Portc.7
Config Graphlcd = 128 * 64sed , Dataport = Porta , Controlport = Portd , Ce = 2 , Ce2 = 3 , Cd = 4 , Rd = 5 , Reset = 7 , Enable = 6
'GLCD Pinning at controlport:
'----------------------------
'micro | bascom | board | display | Pin | description
'
'Pind.2 = CE = CS1 = CSA = 1 = chip select first chip
'Pind.3 = CE2 = CS2 = CSB = 2 = chip select second chip
'Pind.4 = CD = RS = DI = 6 = register select, data/instruction
'Pind.5 = RD = R/W = R/W = 7 = read/write
'Pind.7 = Reset = RST = RST = 17 = chip reset
'Pind.6 = Enable = E = E = 8 = chip Enable
'--- Ausgänge konfigurieren ---------------------------------------------------
Dim X As Byte
On Timer0 Ontimer0
Ddrc = &B01100000
'Timer0 = 1
Config Timer0 = Timer , Prescale = 1
Enable Timer0
Enable Interrupts

Cls
Do
Portc.6 = Not Portc.6
X = Timer0
Setfont Font8x8
Lcdat 4 , 18 , X
Waitms 500
Loop

Ontimer0:
Portc.5 = Not Portc.5
Return

$include "font8x8.font"

Ich habe das experementierboard von easyavr5 und da sind alle ausgänge an einer led angeschlossen. so sehe ich auch was die ausgänge machen.

die led in der loop-schleife blinkt wie erwatret immer im 500ms takt, das ist die von portc.6.
die von portc.5 bleibt tot.

for_ro
24.02.2009, 21:48
Bevor du etwas an den Fuses änderst, ändere lieber dein Programm so ab, dass anstelle von PortC.5 PortC.7 benutzt wird. Also
Ddrc = &B11000000
Portc.7 = Not Portc.7 'hier kanst du auch Toggle PortC.7 schreiben

Gruß

Rolf

uwe44k
24.02.2009, 22:01
ich hab das jetzt auf c.7 abgeändert, aber die c.7 ist auch tot.

ich beschreib jetzt mal was das lcd angezeigt:

beim start fängt es bei 190 an und zählt in 2er schritten hoch bis zu 254 (was ja logisch ist) dann springt es um auf 054, dann auf 186 und wieder in 2er schritten bis auf 254 hoch.

ich weiß nicht warum es nicht bei 0 anfängt und die schritte von 0-100 bzw 184 ignoriert???

uwe44k
24.02.2009, 22:03
ps: an den fuses werd ich so schnell nichts ändern!! aber trotzdem danke

for_ro
24.02.2009, 22:15
Na ja, die Timer Werte die rauschen nur so durch.
Der Timer läuft wegsen Prescale 1 mit 8MHz. 8 bit heisst nach 256 Schritten läuft er über, also nach 32 µs. Das macht er so weiter, also etwa 30KHz.
Ich könnte mir vorstellen, dass die LED an PortC.5 auch in dem Takt schaltet und dass du das überhaupt nicht siehst.
Was willst du denn damit erreichen?

uwe44k
24.02.2009, 22:27
aber das ist doch der äußerste zufall das ich auf dem lcd immer den gleichen ablauf sehe!! ich hab auch schon alle prescaler durchgemacht, also 1, 8, 64, 256 und 1024 und es ergiebt sich nichts auße das ich die zahlen am lcd nicht mehr verfolgen kann!

uwe44k
24.02.2009, 22:34
übrigens müßet die led genauso lang aus wie an bleiben und ich bin der meineung das man das sehen müßte, also bei 10 ms sieht man noch das die led flackert

for_ro
24.02.2009, 22:40
aber das ist doch der äußerste zufall das ich auf dem lcd immer den gleichen ablauf sehe!!
Da ist ja nichts, was variabel wäre. Daher braucht er schon immer die gleiche Anzahl von Zyklen für die Bearbeitung.

ich hab auch schon alle prescaler durchgemacht, also 1, 8, 64, 256 und 1024 und es ergiebt sich nichts auße das ich die zahlen am lcd nicht mehr verfolgen kann!
Wenn du größere Zahlen nimmst, laufen die Wert schneller am LCD?
Da wird doch nur alle 500ms ein neuer Wert angezeigt.

Ich sehe gerade, dass du C.7 schon für den 1wire genommen hast, nimm den also nicht für die LED.

Gruß

Rolf

uwe44k
24.02.2009, 22:53
ok, wenn ich nicht den c7 nehmen soll welcher bleibt denn dann noch übrig! sorry wenn ich so nervig schreibe aber ich bin ein bischen genervt. da hat man nen µc mit zig-tausent ausgängen und wenn man ein lcd dran hat kann man nur 2 benutzen!