Moin moin, Ich bin hier am verzeifeln. Ich weiss echt nicht mehr weiter: Ich habe hier sechs LCDs von myavr.de bestellt, um diese auf eine selbsterstelle Experimentierplatine zu montieren. Auf der Platine befindet sich ein ATmega16 (16MHz) und ich benutze die Peter Fleury Library (LCD ist HD44780 kompatibel). Ich kriege das LCD auf der Platine mit dem ATmega16 einfach nicht zum laufen. Deswegen habe ich auf einer Platine, die ich eh noch zu testzewcken brauchen werde das selbige LCD mit einem ATmega8 aufgebaut. Diese Schaltung lläuft prima und das LCD macht seine Dienste. Wenn ich das Programm so uumschreibe, dass ich es auf der Platine mit dem m16 benutze könnte, ffunktioniert dort jedoch nichts. Wie gesagt, ich bin ratlos. Könnt ihr mir helfen? lcd.h: http://pastebin.com/FQ5ZgWgQ lcd-main.c: http://pastebin.com/0ZXQWmrH Und hier noch der Ausschnitt des Schaltplanes (Anhang). Vielen Dank im Voraus. Greez Jey
Also die fuses hab ich soweit eigentlich richtig eingestellt: High: 0xD9 Low: 0xFF Greez Jey
Teste es doch mal mit einer LED, ob Du alle Portpins richtig ansteuern kannst (reihum überall anklemmen und sehen, ob es blinkt). Dann weißt Du schon mal mehr. fchk
Hey, also, ich habe jetzt mal an alle 7 Pins eine LED gegen Masse geschaltet. Anschliessend musste ich feststellen, dass an E, RW, RS jeweils nur rund 1.4V anliegen. Die Db0 - Db3 haben jeweils ca. 4V. Kann das daran liegen, dass die mit einer hohen Frequenz angesteuert werden, und darum das ganze eine art PWM wird? Der Controller ist übrigends Fabrikneu und ein neuer hat auch nichts gebracht. Greez Jey
Hallo Um die Portpins mit dem Led zu testen, solltest du ein kleines Testprogramm schreiben, das unabhängig von der LCD-Routinen die einzelnen Portpins ansteuert. Innerhalb des LCD-Programms ist das mit einer Led kaum möglich. Led-Testprogramm:
1 | #define DF_CPU 1000000 // Taktfrequenz ATmega 1MHz
|
2 | #include <avr/io.h> // AVR Register und Konstantendefinitionen |
3 | #include <util/delay.h> // Bibliothek mit Warteroutinen (es wird kein Timer im ATmega verwendet) |
4 | |
5 | // Main-Programm
|
6 | int main (void) |
7 | {
|
8 | DDRA |= (1<<DDA4); // Portpins auf Ausgang |
9 | DDRA |= (1<<DDA5); |
10 | DDRC |= (1<<DDC1); |
11 | DDRC |= (1<<DDC2); |
12 | DDRC |= (1<<DDC4); |
13 | DDRC |= (1<<DDC5); |
14 | DDRC |= (1<<DDC6); |
15 | DDRC |= (1<<DDC7); |
16 | |
17 | // Programmschleife
|
18 | while(1) |
19 | {
|
20 | PORTA |= (1<<PA4); // Portpin auf high |
21 | PORTA |= (1<<PA5); // Portpin auf high |
22 | PORTC |= (1<<PC1); // Portpin auf high |
23 | PORTC |= (1<<PC2); // Portpin auf high |
24 | PORTC |= (1<<PC4); // Portpin auf high |
25 | PORTC |= (1<<PC5); // Portpin auf high |
26 | PORTC |= (1<<PC6); // Portpin auf high |
27 | PORTC |= (1<<PC7); // Portpin auf high |
28 | _delay_ms(500); |
29 | PORTA &=~(1<<PA4); // Portpin auf low |
30 | PORTA &=~(1<<PA5); // Portpin auf low |
31 | PORTC &=~(1<<PC1); // Portpin auf low |
32 | PORTC &=~(1<<PC2); // Portpin auf low |
33 | PORTC &=~(1<<PC4); // Portpin auf low |
34 | PORTC &=~(1<<PC5); // Portpin auf low |
35 | PORTC &=~(1<<PC6); // Portpin auf low |
36 | PORTC &=~(1<<PC7); // Portpin auf low |
37 | _delay_ms(500); |
38 | return 0; |
39 | }
|
40 | }
|
Gruß Rolf
Hi, Als erstes habe ich das Programm eben kurz vereinfacht:
1 | #include <avr/io.h> // AVR Register und Konstantendefinitionen |
2 | #include <util/delay.h> // Bibliothek mit Warteroutinen (es wird kein Timer im ATmega verwendet) |
3 | |
4 | // Main-Programm
|
5 | int main (void) |
6 | {
|
7 | DDRC = 0xFF; |
8 | DDRA = 0xFF; |
9 | DDRD = 0xFF; |
10 | |
11 | // Programmschleife
|
12 | while(1) |
13 | {
|
14 | PORTA ^= (1<<PA4); // Portpin auf high |
15 | PORTA ^= (1<<PA5); // Portpin auf high //Das ist das Backlight... |
16 | PORTC ^= (1<<PC1); // Portpin auf high |
17 | PORTC ^= (1<<PC2); // Portpin auf high |
18 | PORTC ^= (1<<PC4); // Portpin auf high |
19 | PORTC ^= (1<<PC5); // Portpin auf high |
20 | PORTC ^= (1<<PC6); // Portpin auf high |
21 | PORTC ^= (1<<PC7); // Portpin auf high |
22 | _delay_ms(500); |
23 | }
|
24 | return 0; |
25 | }
|
Die LEDs blinken jetzt im 500ms Takt.... Wie gesagt, die Leitungen sind okay.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.