www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mega32 LCD geht nicht


Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe an einen Mega32 ein 2x16 LCD angeschlossen, und zwar an PORT D.
Das Display zeigt aber nur die erste Zeile mit ausgefüllten Kästn an, 
die zweite ist dunkel. Das Programm hab ich vom meinem Mega8 übernommen, 
dort hat alles funktioniert. Weiß jemand warum es beim 32 nicht geht, 
also auf die Pinbelegung habe ich geachtet.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Weiß jemand warum es beim 32 nicht geht,

Das Programm ist falsch.

>also auf die Pinbelegung habe ich geachtet.

Das haben schon viele gesagt;) Programm auch für
Atmega32 compiliert?

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
danke für die schnelle Antwort erstmal.
Also das Programm hab umgestellt auf den 32.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Pinbelegung für das LCD habe ich identisch mit dem 8 gemacht, also 
für das LCD.

Autor: Software-Entwickler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Taktung? Evtl. stimmen Delays nicht mehr.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Müsten die Verlängert werden?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Taktung? Evtl. stimmen Delays nicht mehr.

Oder Wackelkontakt, Kurzschluß, Display kaputt, CPU kaputt, Pins 
vertauscht,
Programm falsch. Ohne weitere Infos wie Pinbelegung und Sourcecode
kann man nichts mehr dazu sagen.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso ich habe ihn mit der gleichen Taktung laufen wie den 8er.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
void lcdInit()
{
  // Port D = Ausgang
  DDRD=0xff;
  PORTD=0;
  // warten bist LCD-Controller gebootet
  waitMs(50);
  // SOFT-RESET
  PORTD = 0b00110000;// 0x30;
  sbi(PORTD,3);
  cbi(PORTD,3);
  waitMs(5);
  PORTD = 0b00110000;// 0x30;
  sbi(PORTD,3);
  cbi(PORTD,3);
  waitMs(1);
  PORTD = 0b00110000;// 0x30;
  sbi(PORTD,3);
  cbi(PORTD,3);
  waitMs(5);

  // 4-BitModus einschalten
  PORTD=0x20;

  // Schreibsignal
  sbi(PORTD,3);
  cbi(PORTD,3);
  waitMs(5);

  // ab hier im 4-Bit-Modus
  lcdCmd(0x28);    // Funktions-Set: 2 Zeilen, 5x7 Matrix, 4 Bit
  lcdCmd(0x06);    // Entry Mode
  lcdOn();
  lcdClear();
}
hier mal die init

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das komische ist halt dass nur die erste Zeile mit gefüllten Kästchen 
dargestellt wird.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>das komische ist halt dass nur die erste Zeile mit gefüllten Kästchen
>dargestellt wird.

Das ist nicht komisch, das LCD wird nicht initialisiert.
Pins falsch angeschlossen oder Timing stimmt nicht.

BTW: Ich schaue mir nur vollständige Codes mit kompletter
Pinbelegung an. Vieleicht schicke ich dir dann sogar
eine HEX mit der du mal probieren kannst ob nicht doch
Pins falsch angeschlosssen sind.

Autor: erhardd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-die "schwarzen Kästchen" sind ein Indiez, das das LCD nicht 
initialisiert wurde.
Du gibst keine Auskunft über die CPU-Frequ., daher ist es nicht möglich, 
Deine Delay-Zeiten einzuordnen.
Ebenso die Funktion lcdCmd . Wie realisiert?(SPI?);
Und noch ein Tip zu gerne gemachten Fehlern.-die Fuses.
-oder JTAG noch dran. oder...weis der Fuchs was!

Autor: erhardd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Holger
sorry, hab nicht gesehen, das Du schon geantwortet hattest!

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also JTAG hab ich abgeschaltet.
Die Frequenz ist 3,6864 MHZ.
Hier mal den Code:

#define  F_CPU 3686400
#include <avr\io.h>

//////////////////////////////////////
//  LCD
//////////////////////////////////////


void lcdSend(char data)
{
  // aktuelles RS ermitteln
  char rs=PORTD;
  rs&=4;
  // High-Teil senden
  char tmp=data;
  tmp&=0xf0;
  tmp|=rs;
  PORTD=tmp;
  // Schreibsignal
  sbi(PORTD,3);
  cbi(PORTD,3);
  // Low-Teil senden
  tmp=data;
  tmp&=0x0f;
  tmp*=16;
  tmp|=rs;
  PORTD=tmp;
  // Schreibsignal
  sbi(PORTD,3);
  cbi(PORTD,3);
  // verarbeiten lassen
  waitMs(1);
}
//---------------------------------------------------------------------- 
-----
//  lcdCmd(..) - sendet ein Kommando an LCD
//  PE:  cmd=Kommando-Byte
//---------------------------------------------------------------------- 
-----
void lcdCmd(char cmd)
{
  cbi(PORTD,2);    // RS löschen = Kommando
  lcdSend(cmd);    // senden
}
//---------------------------------------------------------------------- 
-----
//  lcdWrite(..) - sendet ein Zeichen (Daten) an LCD
//  PE:  text=Zeichen
//---------------------------------------------------------------------- 
-----
void lcdWrite(const char text)
{
  sbi(PORTD,2);    // RS setzen = Daten
  lcdSend(text);    // senden
}
//---------------------------------------------------------------------- 
-----
//  lcdWrite(..) - sendet eine Zeichenkette an LCD
//  Die Zeichenkette muss mit 0x00 abgeschlossen sein
//  PE:  pText=Zeiger auf Zeichenkette
//---------------------------------------------------------------------- 
-----
void lcdWrite(const char* pText)
{
  while(pText[0]!=0)
  {
    lcdWrite(pText[0]);
    pText++;
  }
}
//---------------------------------------------------------------------- 
-----
//  lcdWrite(..) - sendet eine Zeichenkette an LCD
//  PE:  pText=Zeiger auf Zeichenkette
//    count=Anzahl der zu sendenden Zeichen
//---------------------------------------------------------------------- 
-----
void lcdWrite(const char* pText, int count)
{
  while(count!=0)
  {
    lcdWrite(pText[0]);
    pText++;
    count--;
  }
}
//---------------------------------------------------------------------- 
-----
//  lcdHome(..) - Cursor auf Position 1,1
//---------------------------------------------------------------------- 
-----
void lcdHome()
{
  lcdCmd(0x02);
  waitMs(2);      // warten
}
//---------------------------------------------------------------------- 
-----
//  lcdClear(..) - löscht die Anzeige im LCD
//---------------------------------------------------------------------- 
-----
void lcdClear()
{
  lcdCmd(0x01);
  waitMs(2);      // warten
}
//---------------------------------------------------------------------- 
-----
//  lcdOn(..) - schaltet das LCD an
//---------------------------------------------------------------------- 
-----
void lcdOn()
{
  lcdCmd(0b00001100);//0x0E);Cursor aus
}
//---------------------------------------------------------------------- 
-----
//  lcdOff(..) - schaltet das LCD aus
//---------------------------------------------------------------------- 
-----
void lcdOff()
{
  lcdCmd(0x08);
}
//---------------------------------------------------------------------- 
-----
//  lcdGoto(..) - setzt die Cursorposition
//   PE:  row = Zeile 1..2
//    col = Spalte 1..16
//---------------------------------------------------------------------- 
-----
void lcdGoto(int row, int col)
{
  row--;        // Null-basierend
  row&=0x01;      // sicherheitshalber
  row*=0x40;      // Zeile nach Bit 6 bringen
  col--;        // Null-basierend
  col&=0x0f;      // sicherheitshalber
  char tmp=row|col;
  tmp|=0x80;      // Cursor setzen
  lcdCmd(tmp);    // senden
  /*
  switch(row)
  {
    case 1: row=0x00;
        break;
    case 2: row=0x40;
        break;
    case 3: row=0x14;
        break;
    default:
    case 4: row=0x54;
  }
  col--;
  if(col>19) col =19;
  char tmp=row|col;
  tmp|=0x80;
  lcdCmd(tmp);
  */
}
//---------------------------------------------------------------------- 
-----
//  lcdInit(..) - Schaltet die Ports und Initialisiert das LCD
//---------------------------------------------------------------------- 
-----
void lcdInit()
{
  // Port D = Ausgang
  DDRD=0xff;
  PORTD=0;
  // warten bist LCD-Controller gebootet
  waitMs(50);
  // SOFT-RESET
  PORTD = 0b00110000;// 0x30;
  sbi(PORTD,3);
  cbi(PORTD,3);
  waitMs(5);
  PORTD = 0b00110000;// 0x30;
  sbi(PORTD,3);
  cbi(PORTD,3);
  waitMs(1);
  PORTD = 0b00110000;// 0x30;
  sbi(PORTD,3);
  cbi(PORTD,3);
  waitMs(5);

  // 4-BitModus einschalten
  PORTD=0x20;

  // Schreibsignal
  sbi(PORTD,3);
  cbi(PORTD,3);
  waitMs(5);

  // ab hier im 4-Bit-Modus
  lcdCmd(0x28);    // Funktions-Set: 2 Zeilen, 5x7 Matrix, 4 Bit
  lcdCmd(0x06);    // Entry Mode
  lcdOn();
  lcdClear();
}


int main(){

  lcdInit();


  while(1){
  //menu_();
  lcdGoto(1,1);
  lcdWrite("Test");
  }
return 0;
}

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hier

> sbi(PORTD,3);
> cbi(PORTD,3);

macht schon mal die geforderte Mindest-E-Pulslänge von 500 µs nicht, 
selbst nicht bei dem relativ langsamen Takt von ca. 3 MHz.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Muss ich die Zeit verlängern?

Autor: holger (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
>macht schon mal die geforderte Mindest-E-Pulslänge von 500 µs nicht,

Nu übertreib mal nicht;) 500ns tuns auch.

>Muss ich die Zeit verlängern?

Ja. Versuch mal die HEX im Anhang.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger schrieb:
> Nu übertreib mal nicht;) 500ns tuns auch.

:) Ja, natürlich.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gleicher Effekt wie zuvor.

Autor: Andy (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier ist mal das Layout.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Leiste unten ist für das LCD.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Gleicher Effekt wie zuvor.

D0-D3 vom LCD liegen auf GND. War das beim Atmega8 auch so?
Lass die mal in der Luft hängen. Ich schliess die nie an.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich versuchs mal, war aber beim 8er au so.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich versuchs mal, war aber beim 8er au so.

Dann lass das so und such nach Kurzschlüssen oder
schlechten Lötstellen.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja alles überprüft

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andy schrieb:
> Also JTAG hab ich abgeschaltet.
> Die Frequenz ist 3,6864 MHZ.

Hast du die kontrolliert?

>   waitMs(1);

Die Funktion waitMs würde ich gerne mal sehen

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich hab JTAG ind den Fuses abgeschaltet

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber warum sind die Balken in der ersten Zeile?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Aber warum sind die Balken in der ersten Zeile?

Das Display wird nicht initialisiert.

MfG Spess

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie müßte die Initialisierung aussehen? Oder was hab ich falsch gemacht?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wie müßte die Initialisierung aussehen? Oder was hab ich falsch gemacht?

Bis auf das zu kurze Timing bei Enable nicht.
Wenn mein Code bei dir nicht läuft, dann stimmt was mit der
Hardware nicht.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber was kann das sein, das Layout hab ich ja mal angehängt, für das LCD 
ist ja nicht viel dran.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab auch schon Displays getauscht und wo anders getestet. Was ich 
festgestellt habe ist wenn ich ein 4 Zeiliges ranhänge ist die erste 
Zeile und die dritte mit Kästchen gefüllt????????????

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Aber was kann das sein, das Layout hab ich ja mal angehängt, für das LCD
>ist ja nicht viel dran.

Prüf die Leitungen mal auf Kurzschluss zu GND. GND geht da ja recht
knapp unter der Leiste vorbei. Ansonsten mal testen ob eine
Leitung gar keinen Kontakt hat.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Was ich festgestellt habe ist wenn ich ein 4 Zeiliges ranhänge ist die erste
>Zeile und die dritte mit Kästchen gefüllt????????????

Weil beide Zeilen für den Displaykontroller zu ersten Zeile zählen. Also 
das gleiche Ergebnis wie bei einem zweizeiligen.

MfG Spess

Autor: erhardd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-mal sehen:
RS oder Command/Data bei Dir PD2;
CLK oder Clock PD3;(oder CS?)
R/W wahrscheinlich fest verdrahtet auf Write?
CE oder Chip enable auch fest verdrahtet, worauf auch immer?
RS = 1 => Data (merkwürdig-aber o.k.)
Für Dich wäre es ein leichtes gewesen, die Pinbelegung ebenfalls 
darzustellen, -ich musste erst suchen!
PD4-7 Datenport;
Welches Display?
Nehme mal an , die INI-Routine stimmt(lt.Datenblatt)
Die Funktion lcdSend() wird sowohl für Kommandos als auch für Daten zum 
Datentransfer benutzt, sodas RS ausmaskiert wird um dann entsprechend 
"verodert" zu werden.
Einen Chip-enable sehe ich nicht, -aber Du sagst ja, die Software läuft!

Auf den ersten Blick, --o.K.;
Blieben die Fuses?
Was für ein Display ist denn das?(4x20) --Typ/Bezeichnung;

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK.
Klartext.
Die gefüllten Kästchenzeilen malt das Display immer hin!
Die sind so etwas wie eine Einschaltkontrolle. Solange das LCD keine 
vernünftige Initialisierung von deinem Programm bekommen hat, macht es 
diese Kästchenzeilen hin. Zb auch deshalb, damit man erst mal den 
Kontrast am LCD einstellen kann und weiß, dass es an ist.

Daher: Wundere dich nicht über die Kästchenzeilen.
Die sagen nur aus, dass dein LCD nicht richtig initialisiert ist. Das 
kann wegen Timing sein, das kann sein, weil eine Leitung nicht richtrig 
verbunden ist, das kann sein weil du einen Anschlussfehler hast.

Und nein: komm jetzt nicht damit, das am Mega8 auch alles gleich war. 
Irgendwas ist anderes. Sonst würde dein LCD nämlich funktionioeren. QED

Autor: erhardd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der Zeit, in der ich deine Software überprüft habe, hast Du ja schon 
das Layout gepostet.Hätte viel Zeit gespart!

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Einen Chip-enable sehe ich nicht, -aber Du sagst ja, die Software läuft!

Text-LCDs haben normalerweise kein explizites CS. Die Steuerleitungen 
sind RS, R/W und E.

MfG Spess

Autor: Andy (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ist ein Blau/Weiß Display.

Ich wundere mich nur weil ich alles so angeschlossen hab wie beim 8er.
Und jetzt habe ich eben den Verdacht dass es beim 32er anders sein muss.
Die leitungen habe ich alle Überprüft. Direkt vom Controller zum Display 
gemessen. Die stimmen.

Autor: erhardd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab letzte Zeit nur mit graph. Displays zu tun!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nochmal.
Wie sieht die waitMs aus?
Hast du die Taktfrequenz überprüft?

> Und jetzt habe ich eben den Verdacht dass es beim 32er anders sein muss.
Diesen Verdacht kannst du ad acta legen.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die WaitMs() müßte in der  <avr\io.h> stehen. Habe ich nicht selbst 
geschrieben.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat das etwas zu bedeuten auf dem Controller steht Mega32 16PU

Autor: holger (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
>Und jetzt habe ich eben den Verdacht dass es beim 32er anders sein muss.
>Die leitungen habe ich alle Überprüft. Direkt vom Controller zum Display
>gemessen. Die stimmen.

Wirklich? Auch keine Kurzschlüsse zwischen den Pins?

Im Anhang mal eine Datei die für 16MHz compiliert wurde.
Damit sollte es keinerlei Timing Probleme geben.
Und du benutzt jetzt erstmal nur diese Datei zum testen.
Um deinen Code kümmern wir uns später.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andy schrieb:
> Die WaitMs() müßte in der  <avr\io.h> stehen. Habe ich nicht selbst
> geschrieben.

ALso in meinem io.h ist keine drinnen.
Wozu auch. Die mitgelieferten Funktion heisst _delay_ms und ist in 
delay.h

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andy schrieb:
> Hat das etwas zu bedeuten auf dem Controller steht Mega32 16PU

Du suchst an den völlig falschen Stellen.
Du kannst es ruhig glauben:
Entweder deine Hardware oder deine Software ist fehlerhaft.

Du deine Software nicht schlecht aussieht und auch auf einem Mega8 
funktioniert hat, wird es wohl die Hardware sein. Kurzschluss, 
Kabelbruch, kalte Lötstelle. Irgend sowas.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Funktioniert immer noch nicht.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei der Projektgenerierung hast du auch sicher Mega32 eingestellt?

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja aber durchgemessen hab ich alles.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja das hab ich eingestellt, der controller wird auch erkannt.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Passt es vom Layout her, oder habe ich da die Ports falsch 
angeschlossen? Meiner Meinung her nicht.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andy schrieb:
> Passt es vom Layout her, oder habe ich da die Ports falsch
> angeschlossen? Meiner Meinung her nicht.


Dein Code ist zwar maximal unübersichtlich, aber IMHO müsste er mit der 
Pinbelegung übereinstimmen.

An deiner Stelle würde ich aber mit Testprogrammen die Pinbelegung 
durchprobieren. Den RS Pin auf 1 und mit dem Voltmeter kontrollieren, ob 
am LCD auch wirklich nur der RS Pin auf 1 gegangen ist.
Dassselbe dann mit dem E Pin und den Datenpins.

Alle anderen Pins müssen jeweils auf 0 bleiben.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Bei der Projektgenerierung hast du auch sicher Mega32 eingestellt?

Ist uninteressant wenn er meine HEX Datei benutzt.
Wir drehen uns sonst im Kreis.

>Ja aber durchgemessen hab ich alles.

Kann ich nicht so recht glauben.

>Funktioniert immer noch nicht.

Du hast ein Hardwareproblem wenn meine HAX Datei nicht funktioniert.
Such den Fehler dort. Vieleicht ist dein Atmega32 am PORTD inzwischen 
tot.

So, noch mal zum abchecken:

ALLE, und ich meine ALLE Leitungen folgendermaßen
durchmessen:

1) Kurzschluß auf GND
2) Leitungen haben Verbindung vom uC Sockel bis zum LCD
3) Es gibt keine Kurzschlüsse zwischen den Leitungen
4) Trenn die Leitungen D0-D3 am LCD doch mal auf.

Noch ein paar Fragen:
Das LCD was du jetzt benutzen möchtest hat am Atmega8 funktioniert?
Welches LCD genau ist das?

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann werd ich mich mal daran machen.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
holger schrieb:
>>Bei der Projektgenerierung hast du auch sicher Mega32 eingestellt?
>
> Ist uninteressant wenn er meine HEX Datei benutzt.
> Wir drehen uns sonst im Kreis.

holger.
Kannst du bitte auch das C File zur Anschaung posten, damit der Rest 
einen Überblick hat, was du abtestest.


> Du hast ein Hardwareproblem

Denk ich auch.
Irgendwo eine kalte oder einen kurzen.

> Such den Fehler dort. Vieleicht ist dein Atmega32 am PORTD inzwischen
> tot.

Wenn sich nichts weiter ergibt: Vorschlag - Ein möglichst einfaches 
Testprogramm, dass nur die 0x03 samt RS und E-Toggle rausgibt. Und zwar 
im 5 Sekundentakt, damit man mit dem Voltmeter mitkommt.

Autor: erhardd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
RS = 1 => Data (merkwürdig-aber o.k.)
Ich hatte das umgekehrt in Erinnerung(ist schon lange her!)

Autor: holger (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
> Ist uninteressant wenn er meine HEX Datei benutzt.
> Wir drehen uns sonst im Kreis.

>holger.
>Kannst du bitte auch das C File zur Anschaung posten, damit der Rest
>einen Überblick hat, was du abtestest.

Bitte sehr. Das nehm ich wenn ich den Anfängern mal schnell
ne HEX zum probieren bastel. Es gibt schönere LCD Libs.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab jetzt rumprobiert, und ich kann die Ports nicht schalten.

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So ich hab den Fehler. Ersteinmal Danke an alle für die guten Tipps und 
Hilfen. Habe das Datenblatt des 32er noch bisle studiert und etwas 
gefunden. Es war der RESET-Widerstand, beim 8er habe ich ein 10k 
genommen und so auch beim 32er, im Datenblatt steht aber RESET 30-50k. 
Habe dann mal den RESET durchgezwickt und siehe da es kommt Text.

Vielen Dank nochmal an alle!!!!!!

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Es war der RESET-Widerstand, beim 8er habe ich ein 10k
>genommen und so auch beim 32er, im Datenblatt steht aber RESET 30-50k.
>Habe dann mal den RESET durchgezwickt und siehe da es kommt Text.

Falsche Interpretation. So wie ich das sehe, geht dein Resetwiderstand 
nach
Masse und nicht nach VCC.

MfG Spess

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja da hat du recht habs grad nochmal nachgeprüft. Danke dass es dir 
aufgefallen ist. Was passiert eigentlich wenn man den RESET weg läßt?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Was passiert eigentlich wenn man den RESET weg läßt?

Das RESET-Pin hat einen internen Pull-Up (die von dir oben erwähnten 
30-50k).
In bestimmten Umgebungen kann das etwas zu groß sein und der Controller 
macht durch Störungen unkontrollierte Resets. Mit einem kleineren 
externen Pull-Up, und evtl. einem Kondensator nach GND, lässt sich das 
vermeiden.

MfG Spess

Autor: Winfried J. (Firma: Nisch-Aufzüge) (winne)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na das nenne ich mal die Platzhirsche hier an der Nase herumgeführt. Den 
anstehenden Reset jedenfalls hatte niemand im Blick, obgleich schon alle 
Standardfehler aufgezählt wurden.

kann passieren, zeigt nur das man gar nicht so simpel denken kann wie es 
machmal kommt. Nach dem Proggen hat keines deiner Programme auch nur 
einen Wank gemacht.

hehe

Deshalb lasse ich immer irgendwo ne sinnlos Led als Living ligth 
blinken.
Zur Not missbrauche ich den Pin der für die Hintergrundimmung gedacht 
ist und lasse den blinken ;-) so weis ich das was läuft.

Auch das Oszi ist stets in Reichweite um aktivitäten auf den Ports zu 
testen.

MfG Winne ;-)

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.