Forum: Compiler & IDEs HD44780 atmega168


von Christoph G. (christoph_)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich weiss, dass Thema gab es hier schon tausend Mal, aber ich habe 
leider nichts passendes dazu gefunden.

Also ich versuche das Display WD-C2704M unter dem uc Atm 168 zum laufen 
zu kriegen.

Zum Initialisieren und Testen mag ich den Code von Peter Fleury 
verwenden (siehe Anhang). Das Display läuft unter einem Atm 32 
problemlos.

Beim Ausführen des Programms auf dem Atm 168 bleiben die zwei schwarzen 
Balken auf dem LCD Display.

Liegt es daran, dass die zwei Boards nicht miteinander kompatibel sind 
(also vermutlich der Speicher).

Was müsste ich am Code ändern, damit es funktioniert?

Vielen Dank schonmal für alle Tipps.

Gruss
Christoph

von Karl H. (kbuchegg)


Lesenswert?

Christoph G. schrieb:


> Liegt es daran, dass die zwei Boards nicht miteinander kompatibel sind
> (also vermutlich der Speicher).

Eher: vermutlich die Taktfrequenz

von Christoph G. (christoph_)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Christoph G. schrieb:
>
>
>> Liegt es daran, dass die zwei Boards nicht miteinander kompatibel sind
>> (also vermutlich der Speicher).
>
> Eher: vermutlich die Taktfrequenz


Wegen der Taktfrequenz habe ich alle Delays mal um Faktor 10 
vergrössert, hat aber nichts verändert.


Als Taktfrequenz habe ich auf dem Atm168 und auf dem Atm32 1 MHz 
eingestellt.

von Klaus W. (mfgkw)


Lesenswert?

Wie?

von Christoph G. (christoph_)


Lesenswert?

Klaus Wachtler schrieb:
> Wie?

Wie ich die Delays hochgesetzt habe? Auf zwei Weisen:
1) überall delay(...) durch delay(...0) ersetzt
2) #define delay(us)  _delayFourCycles( ( ( 1*(XTAL/4000) )*us)/1000 ) 
durch #define delay(us)  _delayFourCycles( ( ( 10*(XTAL/4000) )*us)/1000 
) ersetzt

Natürlich unabhängig voneinander getestet. Faktor 100 habe ich auch 
schon probiert.

von Klaus W. (mfgkw)


Lesenswert?

nein, ich meinte wie du die Frequenz gesetzt hast - bzw. ob es sicher 
ist, daß er mit dieser Frequenz läuft.

von Christoph G. (christoph_)


Lesenswert?

Klaus Wachtler schrieb:
> nein, ich meinte wie du die Frequenz gesetzt hast - bzw. ob es sicher
> ist, daß er mit dieser Frequenz läuft.


Achso, nein da bin ich mir nicht sicher. Habe mich nicht getraut die 
Fuses beim Atm 168 zu setzen.

Bei einem Testprogramm habe ich für einen 8Bit-Timer Durchlauf mit einem 
Prescaler von 1024 die Zeit von etwa 950 ms gemessen. Das würde nach 
meinen Berechnungen etwa 0,25 MHz entsprechen, was mich doch etwas 
irritiert.


Edit: In AVR Studio wird unter Fuses wenn man ´Read´ drückt `Ext. 
Crystal Osc. 8.0 -    MHz; Start-up time PWRDWN/RESET: 16K CK/...` 
angezeigt.

von Karl H. (kbuchegg)


Lesenswert?

Christoph G. schrieb:

> Achso, nein da bin ich mir nicht sicher. Habe mich nicht getraut die
> Fuses beim Atm 168 zu setzen.

Wenn du die Fuses nicht angerührt hast, dann läuft der auch mit 1Mhz

(Wenn du wieder mal das Problem hast, machs nicht so kompliziert. LED im 
Sekundentakt blinken lassen mittels

  while( 1 ) {
    LEd ein
    _delay_ms( 1000 );
    Led aus
    _delay_ms( 1000 );
  }

die 1 Sekunde kannst du auch so ganz gut schätzen. Die Alternativen die 
du hast, 2 Mhz, 4 Mhz, 8 Mhz, sind davon alle soweit entfernt, das 
merkst du auch mit freiem Auge, ob die Leuchtphase der LED eine ganze 
oder eine halbe (oder eine viertel oder achtel) Sekunde ist.

Wenn F_CPU mit der tatsächlichen Taktfrequenz übereinstimmt und die 
Compileroptimierung auf -Os steht, dann stimmt die 1 Sekunde ziemlich 
gut. Auf ein paar Hunderstel Sekunden Abweichung kommt es dabei nicht 
an.


F_CPU hast du in den Project Options den richtigen wert gegeben?
Die Optimierung des Compilers ist eingeschaltet?

> Edit: In AVR Studio wird unter Fuses wenn man ´Read´ drückt `Ext.
> Crystal Osc. 8.0 -    MHz; Start-up time PWRDWN/RESET: 16K CK/...`
> angezeigt.

Bei wem?`
M168 oder M32

von Karl H. (kbuchegg)


Lesenswert?

Nur damit es da keine Misverständnisse gibt:
Du musst dein Programm für den M168 neu compilieren. MIt den richtigen 
Prozessoreinstellungen. Das Hex-File vom M32 wird auf dem M168 nicht 
laufen.

von Christoph G. (christoph_)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Wenn du die Fuses nicht angerührt hast, dann läuft der auch mit 1Mhz
>
> (Wenn du wieder mal das Problem hast, machs nicht so kompliziert. LED im
> Sekundentakt blinken lassen mittels
>
>   while( 1 ) {
>     LEd ein
>     _delay_ms( 1000 );
>     Led aus
>     _delay_ms( 1000 );
>   }

Ach logisch, den Wald vor ganzen Bäumen nicht gesehen...Danke!


Karl Heinz Buchegger schrieb:
> F_CPU hast du in den Project Options den richtigen wert gegeben?
> Die Optimierung des Compilers ist eingeschaltet?

Das wars, da waren Fehler drin, schon beim Device, statt 168 stand da 
128 und die Optimierung war auch falsch. Vielen Dank Karl Heinz! Das 
hätt ich alleine wohl nie gefunden, habe an den falschen Stellen 
gesucht...Schönen Abend noch!

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.