mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega16 / 8 to LCD


Autor: Jey Bee (jeybee)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Anderer Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hast du bei den Fuses das JTAG Interface deaktiviert?

Gruß

Autor: Jey Bee (jeybee)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jap.

Autor: Jey Bee (jeybee)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also die fuses hab ich soweit eigentlich richtig eingestellt:

High:  0xD9
Low:   0xFF



Greez Jey

Autor: Frank K. (fchk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Jey Bee (jeybee)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf Degen (rolfdegen)
Datum:

Bewertung
0 lesenswert
nicht 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:
#define     DF_CPU 1000000           // Taktfrequenz ATmega 1MHz
#include    <avr/io.h>               // AVR Register und Konstantendefinitionen
#include    <util/delay.h>           // Bibliothek mit Warteroutinen (es wird kein Timer im ATmega verwendet)

// Main-Programm
int main (void)
 {
  DDRA |= (1<<DDA4);    // Portpins auf Ausgang
  DDRA |= (1<<DDA5);
  DDRC |= (1<<DDC1);
  DDRC |= (1<<DDC2);
  DDRC |= (1<<DDC4);
  DDRC |= (1<<DDC5);
  DDRC |= (1<<DDC6);
  DDRC |= (1<<DDC7);

// Programmschleife
  while(1)
  {
        PORTA |= (1<<PA4);     // Portpin auf high
        PORTA |= (1<<PA5);     // Portpin auf high
        PORTC |= (1<<PC1);     // Portpin auf high
        PORTC |= (1<<PC2);     // Portpin auf high
        PORTC |= (1<<PC4);     // Portpin auf high
        PORTC |= (1<<PC5);     // Portpin auf high
        PORTC |= (1<<PC6);     // Portpin auf high
        PORTC |= (1<<PC7);     // Portpin auf high
        _delay_ms(500);
        PORTA &=~(1<<PA4);     // Portpin auf low
        PORTA &=~(1<<PA5);     // Portpin auf low
        PORTC &=~(1<<PC1);     // Portpin auf low
        PORTC &=~(1<<PC2);     // Portpin auf low
        PORTC &=~(1<<PC4);     // Portpin auf low
        PORTC &=~(1<<PC5);     // Portpin auf low
        PORTC &=~(1<<PC6);     // Portpin auf low
        PORTC &=~(1<<PC7);     // Portpin auf low
        _delay_ms(500);
  return 0;
        }
 }

Gruß Rolf

Autor: JeyBee66 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Als erstes habe ich das Programm eben kurz vereinfacht:
#include    <avr/io.h>               // AVR Register und Konstantendefinitionen
#include    <util/delay.h>           // Bibliothek mit Warteroutinen (es wird kein Timer im ATmega verwendet)

// Main-Programm
int main (void)
 {
  DDRC = 0xFF;
  DDRA = 0xFF;
  DDRD = 0xFF;

// Programmschleife
  while(1)
  {
        PORTA ^= (1<<PA4);     // Portpin auf high
        PORTA ^= (1<<PA5);     // Portpin auf high  //Das ist das Backlight...
        PORTC ^= (1<<PC1);     // Portpin auf high
        PORTC ^= (1<<PC2);     // Portpin auf high
        PORTC ^= (1<<PC4);     // Portpin auf high
        PORTC ^= (1<<PC5);     // Portpin auf high
        PORTC ^= (1<<PC6);     // Portpin auf high
        PORTC ^= (1<<PC7);     // Portpin auf high
        _delay_ms(500);
  }
  return 0;
}


Die LEDs blinken jetzt im 500ms Takt....
Wie gesagt, die Leitungen sind okay.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.