Forum: Mikrocontroller und Digitale Elektronik GrafikLCD mit ATMEGA16 und Bascom


von Jannik G. (jannik_96)


Lesenswert?

Hallo,
ich habe das Grafik Display (TG12864B-03) von Pollin angeschlossen und 
zum Laufen gebracht. Ich habe diesen Code verwendet:
1
$regfile = "m16def.dat"
2
$crystal = 10000000
3
$lib "glcdKS108.lbx"
4
5
'Konfiguration Graphik LCD 124*68 Pixel
6
Wait 5
7
Config Graphlcd = 128 * 64sed , Dataport = Porta , Controlport = Portc , Ce = 7 , Ce2 = 6 , Cd = 4 , Rd = 2 , Reset = 3 , Enable = 5
8
Wait 5
9
Setfont Font16x16
10
Cls
11
Wait 5
12
13
Do
14
   Print "Hallo"
15
   Lcdat 1 , 40 , "Hallo"
16
   Wait 5
17
Loop
18
End
19
20
$include "font16x16.font"
21
$include "font8x8.font"
Diesen Code habe ich von einer Internetseite kopiert und auf mein 
Projekt angepasst. Alles hat funktioniert. Doch jetzt habe ich bemerkt 
das die Taktfrequenz auf 10Mhz eingestellt ist. Mein Atmega16 verwendet 
aber die interne Taktquelle.
Als ich im Bascom Code die Frequenz geändert habe, hat das Display nur 
noch wirre Zeichen angezeigt.
Woran kann das liegen?

Vielen Dank
jannik

von sowas (Gast)


Lesenswert?

wenn Du alles zurückstellst - funktioniert es dann wieder? (probier mal 
aus..)

von Jannik G. (jannik_96)


Lesenswert?

ja, funkitoniert

von Karl H. (kbuchegg)


Lesenswert?

Dann sieht es wohl so aus, als ob die LIB das GLCD ein klein wenig zu 
schnell ansteuert.
Wenn die Wartezeiten auf 10Mhz gerechnet wurden, dein Mega aber nur 8Mhz 
macht, dann läuft das darauf hinaus, dass alle Wartezeiten 20% zu lang 
sind. Zu lang ist meistens kein Problem.

Stellst du aber auf 8Mhz um, also das was der Mega wirklich macht, dann 
stimmen die effektiven Wartezeiten mit den programmierten überein. Und 
wenn du Pech hast, hat sie der ursprüngliche Programmierer der Lib etwas 
zu knapp dimensioniert.

Eventuell hast du noch Glück und du kannst mit zusätzlichen Config 
Variablen die LIB in ihren Wartezeiten beeinflussen und die dort ein 
wenig langsamer stellen.

von Jannik G. (jannik_96)


Lesenswert?

Mein Mega16 hat doch nur 1Mhz interne Taktfrequenz, oder?

von Karl (Gast)


Lesenswert?

Hört sich nach einem Timing-Problem an. Du solltest sicherstellen, dass 
Dein Takt zur $crystal Anweisung passt. An einer Kopie der lib kannst Du 
den Parameter @genus suchen und den Wert nach oben um +-1 (max. 2) nach 
unten oder oben anpassen. Diese veränderte Library bindest Du über $lib 
ein.

von Jannik G. (jannik_96)


Lesenswert?

Vielen Dank für die Antworten. Ich hab mir die LIB mal angschaut, 
versteht aber nicht viel davon, aber @genus kommt viermal vor. Welchen 
Wert soll ich wie ändern?
1
.OBJ EF9F
2
* Out _glcd_port , R25
3
  @genus(5)
4
* Sbi _glcd_portm , _glcd_rd
5
* Sbi _glcd_portm , _glcd_enable
6
  @genus(2)
7
* In r1, _glcd_port_in
8
* Cbi _glcd_portm , _glcd_enable
9
* Out _glcd_port_ddr, R25
1
.OBJ 9508
2
_selChip2:
3
* sbi _glcd_portm , _glcd_ce2
4
* cbi _glcd_portm , _glcd_ce
5
.OBJ 9508
6
_gwrite_cmd:
7
* Cbi _glcd_portm , _glcd_cd
8
Rjmp _Gwrite_DataMisc
9
_gwrite_data:
10
* Sbi _glcd_portm , _glcd_cd
11
_gwrite_datamisc:
12
  @genus(5)
13
* Out _glcd_port , R24
14
* Cbi _glcd_portm , _glcd_rd
15
* Sbi _glcd_portm , _glcd_enable
16
  @genus(2)
17
* Cbi _glcd_portm , _glcd_enable

jannik

von Karl H. (kbuchegg)


Lesenswert?

Jannik G. schrieb:
> Mein Mega16 hat doch nur 1Mhz interne Taktfrequenz, oder?

Datenblattleser wissen mehr über die Bauteile die sie verwenden :-)

Dein Mega16 kann 1, 2, 4, und 8Mhz mit dem internen RC-Oszillator.

Wieviel dein ganz persönliches Exemplar zur Zeit macht, kannst nur du 
wissen, weil du das in deinem Brennprogramm eingestellt hast (oder auch 
nicht eingestellt hast, dann macht er 1Mhz).

Auf jeden Fall aber sollte die $CRYSTAL Angabe tunlichst mit dem Wert 
übereinstimmen, den der reale Mega16 auch tatsächlich verwendet. Wenn 
der mit 8Mhz läuft, du aber bei $CRYSTAL 1Mhz angegeben hast, würde das 
zb den Effekt schon erklären.

Also wärs eine extrem gute Idee, erst mal abzuklären auf welche Frequenz 
der µC eingestellt ist.

von Jannik G. (jannik_96)


Lesenswert?

@Karl Heinz Buchegger
Vielen Dank

Ich habe meinen Atmega16 jetzt von 1Mhz auf 8Mhz gestellt und es 
funktioniert. Die $CRYSTAL Angabe habe ich auch auf 8MHZ.

jannik

von Karl (Gast)


Lesenswert?

@genus(5). Aber Du hast es ja schon hinbekommen.

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.