ATmega16 / 8 to LCD

OP #1698680
Lesenswert?

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
Angehängte Dateien:
OP #1698806
Lesenswert?

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
#1698925
Lesenswert?

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
Gast #1698944
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren