PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mega8 läuft zu langsam



MisterMou
26.06.2009, 19:03
Hallo,

Ich versuche gerade ein 4x16 Display über einen ATmega8 anzusteuern, es läuft auch alles.
Das Problem ist er läuft irgendwie total langsam, er bracht ca ne halbe Sekunde bis er das "Bild" komplett aufgebaut hat.

Ich Programmiere mit Bascom, und hab dort auch geschrieben das er mit 16MHz laufen soll...
Habt ihr ne Idee?

Ähm, in brenne mit USBasp, und hab dort ja son 1MHz Jumper, den muss ich gebrückt haben, sonst erkennt er den µC nicht.... das heißt er läuft mit 1Mhz... denke ich^^

Jaecko
26.06.2009, 20:05
Schreib mal das Programm hier rein, dann sieht man evtl. den Fehler. Sonst isses nur Raterei.
Und wenn der Jumper so gesetzt ist, dass er nur mit 1 MHz läuft, dann läuft er auch nur mit 1 MHz. Wie soll er dann mit 16 MHz laufen?
Oder sind die Fusebits auf den ext. 16MHz-Quarz o.ä. Taktquelle gesetzt?

(Den anderen Thread kannst im übrigen selbst löschen; geht übers Editieren)

yaro
26.06.2009, 20:12
Hast du einen externen oszilator an deinem ATmega?
Hast du irgendwelche fuses verändert, oder alles als standart gelassen?

Ich geh mal davon aus, dass du alles standart gelassen hast, und keinen externen quarz angeschlossen hsat.
Dann siehts nämlich folgendermaßen aus:
Dein Controller läuft mit 1MHz, denkt aber, dass er mit 16MHz läuft. Das hat natürlich Auswirkungen: die Warteroutine denkt, sie muss 16mal soviele Taktee warten, wi sie eigentlich soll.
Stell entweder den Controller schneller, oder das Prog langsamer, beides wird deine LCD-Ausgabe beschleunigen.

Gruß, Yaro

MisterMou
26.06.2009, 20:18
Soo, hier der Code.

Ich hab die fuses nicht verändert.

Der 1Mhz Jumper bezieht sich nur auf die Ansprechgeschwindigkeit...

Ich hab keine Waitrotinen drinnen... also im Bildaufbau.



$regfile = "m8def.dat"
$crystal = 16000000

Ddrb = &B00000000
Portb = &B11111111
Ddrd.7 = 1
Portd.7 = 0

Ddrb.4 = 0 'Abzug gegen GND
Portb.4 = 1
Ddrb.5 = 0 'Autoabzug gegen GND
Portb.5 = 1
Ddrb.6 = 0 'Magtaster gegen GND
Portb.6 = 1
Ddrb.7 = 0
Portb.7 = 1
Ddrc.3 = 1 'Mosfet
Portc.3 = 0

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc


Dim Z1 As Word
Dim Z2 As Word
Dim Z3 As Word
Dim Zg As Word
Dim Z1k As Long
Dim Z2k As Long
Dim Z3k As Long
Dim Zgk As Long
Dim Z1kk As Word
Dim Z2kk As Word
Dim Z3kk As Word
Dim Zgkk As Word
Dim Vi1 As Integer 'erster Messwert
Dim Vi2 As Integer 'zweiter Messwert
Dim Vir As Integer 'Differenzwert
Dim Vdif As Integer
Dim T1 As Integer
Dim Modus As Integer
Dim Count As Byte
Dim Mag As Integer
Dim Mun As Integer
Dim Automag As Bit

Automag = 1
Mag = 0
Mun = 0
Vdif = 102


Config Lcd = 16 * 4
Config Lcdpin = Pin , E = Portd.1 , Rs = Portd.0 , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7
Config Lcdbus = 8

Initlcd
Cursor Off

Cls
Locate 1 , 1
Lcd "****************"
Locate 2 , 1
Lcd "* A.S.M.F.D *"
Locate 3 , 1
Lcd "* Ver. 1.0 *"
Locate 4 , 1
Lcd "****************"

Wait 1


Der Rest ist nich weiter wichtig...

Jaecko
26.06.2009, 20:21
Ok, dann haben wir den Fehler schon.
Wie oben genannt: AVR läuft mit 1 MHz, das Programm will 16MHz.

Zitat: "Stell entweder den Controller schneller, oder das Prog langsamer, beides wird deine LCD-Ausgabe beschleunigen. "

MisterMou
27.06.2009, 14:58
Der Jumper steht nur für die Kommunikationsgeschwindigkeit.
http://www.ulrichradig.de/home/index.php/avr/usb-avr-prog
Der Jumper nennt sich "JP2".

Wenn ich den öffne wird der µC nichtmehr erkannt.

Der Programmer ist nicht mit dem Steckbrett verbunden, auf das der mega8 gestzt wird um das Display anzusteuern.

Besserwessi
27.06.2009, 17:55
Wenn es mit der hohen Geschwindigkeit nicht geht, ist das auch ein Zeichen dafür das der µC langsam läuft.

Damit der Quarz benutzt wird, muß man die Fuses ändern. So das ein externer Resonator benutzt wird (nicht externer Takt / Oszillator).

Auch wenn da keine expliziten Verzögerungen drin sind, sind in den LCD Routinen versteckt einige.

MisterMou
27.06.2009, 19:17
Kann ich nicht den internen Tackt auf 16MHz stellen?
Oder ist der interne Tackt auf 1Mhz festgelegt und ich muss ein Quarz nehmen?

Besserwessi
27.06.2009, 20:07
Über die Fuses kann man auch einen internen takt von nominal 8 MHz wählen. Dabei ist dann aber der Feinabgelich wohl nicht kalibiert. Ein RS232 verbindung wird damit so auf Anhieb wahrscheinlich nicht funktionieren.