mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmega8 - HD44780 nur ein schwarzer Balken


Autor: lcd display (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Ich versuch mich gerade daran ein LCD(HD44780) mit dem ATMega8 
anzusprechen! Ich hab folgenden Code
.include "m8def.inc"
.include "lcd_functions.asm"

main:
  ldi r16, LOW(RAMEND)
  out SPL, r16
  ldi r16, HIGH(RAMEND)
  out SPH, r16

  
  
  ldi r16, 0xFF
  out DDRB, r16

  rcall lcd_init
  rcall lcd_clear

  loop: 
    rjmp loop
led_functions.asm:
.equ LCD_PORT = PORTB
.equ PIN_E = 5
.equ PIN_RS = 4
// PD4-7 an PORTB 0-3

delay5ms:   /// Für 16 mhz ca. 5,02 ms
  ldi r16, 80      

  delay5ms_loop1: 
    ldi r17, 250
    delay5ms_loop2: 
      dec r17
      nop
      brne delay5ms_loop2
    dec r16        // 1 Cycle = 0,25us
    brne delay5ms_loop1      // 2 Cycle = 0,5 us
  ret

delay100us:
  ldi r16, 200
  delay100us_loop:
    nop
    nop
    nop
    nop
    nop
    dec r16
    brne delay100us_loop
  ret

enable:
  sbi LCD_PORT, PIN_E
  ldi r16, 0x04
  enable_loop: 
    dec r16
    brne enable_loop
  cbi LCD_PORT, PIN_E
  ret

lcd_init:
  rcall delay5ms
  rcall delay5ms
  rcall delay5ms
  ldi r16, 0b00000011    // $3
  out LCD_PORT, r16      // in PORTD ausgeben
  rcall enable      // Enable Bit setzen 1. mal
  rcall delay5ms      // min. 4,1 ms warten
  rcall enable      // Enable Bit setzen 2. mal
  rcall delay5ms      // min. 4,1 ms warten
  rcall enable      // Enable Bit setzen 3. mal
  rcall delay5ms      // min. 4,1 ms warten
  ldi r16, 0b00000010    // auf 4-Bit Modus umstellen
  out LCD_PORT, r16      
  rcall enable
  rcall delay5ms

  ldi r20, 0b00101000    // 4-Bit Modus, 2-Zeilig, 5*7 Pixel
  rcall lcd_command
  ldi r20, 0b00001111    // Display/Curser(-blinken) ein
  rcall lcd_command
  ldi r20, 0b00010100

  ret

lcd_command:         // Befehl in r20
  mov r21, r20
  swap r20
  andi r20, 0b00001111

  out LCD_PORT, r20
  rcall enable

  andi r21, 0b00001111
  out LCD_PORT, r21
  rcall enable
  
  rcall delay100us
  ret

lcd_data:
  mov r21, r20    
  swap r20
  andi r20, 0b00001111
  sbr r20, (1<<PIN_RS)    // RS auf Daten umstellen (1)

  out LCD_PORT, r20
  rcall enable

  andi r21, 0b00001111
  sbr r21, (1<<PIN_RS)    // RS auf Daten umstellen (1)
  out LCD_PORT, r21
  rcall enable

  rcall delay100us
  rcall delay100us
  ret

lcd_clear:
  ldi r20, 0b00000001
  rcall lcd_command
  rcall delay5ms
  ret
Ist im grunde der aus dem Tutorial nur etwas verändert...
Gibt es hier drin i-einen Fehler? Habs eig gestern schon mal geschaft 
etwas anzuzeigen aber jetzt gehts nichtmehr!? Hab nur am Code bischenwas 
verändert aber eig nur Makros eingefügt und so... Die Schaltung hab ich 
auch nochmal neu aufgebaut! Hab hier im Forum was gelesen, dass diese 
Controller sehr anfällig gegen elektrostatische Aufladung sind oder so.. 
Kann das sein das ich den zerstört hab?
PS. verwende wie man sieht 4-Bit Modus und 16 MHz Quarz

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@lcd display (Gast)

>Ich versuch mich gerade daran ein LCD(HD44780) mit dem ATMega8
>anzusprechen! Ich hab folgenden Code

>Ist im grunde der aus dem Tutorial nur etwas verändert...

Warum? Wenn du Anfänger bist solltest du dich erstmal zu 100% ans 
Tutorial halten. Nimm also den Code UNVERÄNDERT aus dem Tutorial und 
dann sehen wir weiter.

MfG
Falk

Autor: lcd display (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es hat ja schon funktioniert mit dem obigen Code aber jetzt gehts 
nichtmehr! Habs jetzt auch nochmal mit dem Code ausm Tutorial versucht 
und da zeigts gar nichts an...

Autor: Michael Leusink (hasimaus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo lcd display,

bin jetzt gerade kein Atmega Experte, aber wenn ich mir Deine "main" 
anschaue, dann machst Du ein Init und dann ein Clear und danach eine 
Endless Loop. An welcher Stelle werden den Daten ausgegeben ?

Gruß

Autor: lcd display (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
niergens aber durch das clear sollte ja kein Balken zu sehn sein oder 
nicht?

Autor: Michael Leusink (hasimaus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja gut, ist schon korrekt.

Vielleicht eine ganz blöde Sache wie falsch eingestellter Kontrast.
Zudem kann es sein, dass die Delays etwas zu knapp sind. Je nach HD44780 
oder Kompatiblen kann das CLEAR bis 40ms brauchen.

Gruß

Autor: max power (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
solange die lcd_funtions.asm vor main eingebunden wird, durchläuft das 
programm erst dise einbindung.
entweder einen sprung nach reset zu main oder:
.include "m8def.inc"


main:
  ldi r16, LOW(RAMEND)
  out SPL, r16
  ldi r16, HIGH(RAMEND)
  out SPH, r16

  
  
  ldi r16, 0xFF
  out DDRB, r16

  rcall lcd_init
  rcall lcd_clear

  loop: 
    rjmp loop

.include "lcd_functions.asm"

Autor: lcd display (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Michael Leusink
lcd_clear ist doch sowieso der letzte befehl und danach kommt gar nichts 
mehr... der hat ja sowieso solang zeit wie er gerade braucht!
@max power
Hab ich geändert funktioniert aber immer noch nicht

Ist es theoretisch möglich das der Controller defekt ist? Kann man das 
testen? Es wird einfach nur noch eine Zeile mit schwarzen Kästchen 
angezeigt!

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

Bewertung
0 lesenswert
nicht lesenswert
lcd display schrieb:

> Ist es theoretisch möglich das der Controller defekt ist? Kann man das
> testen?

Sicher.
Ein bischen Phantasie!

LEd anhängen und nachsehen ob man die zum Leuchten bringt.
Dann Gegentest: per Programm nicht leuchten lassen
Wer will kann dann, zur Übung, noch einen drauf setzen: LED blinken 
lassen.

Spätestens wenns blinkt steht zweifelsfrei fest: Der µC arbeitet.

Aber wenn man ehrlich ist:
In den seltensten Fällen ist es ein Hardware-Defekt. In den meisten 
Fällen ist es ein Programmfehler :-)
Was allerdings vorkommt: Kabl ist aus seiner Halterung gerutscht oder 
überhaupt abgerissen (vor allen an den Enden, an denen das Lot die 
Kabelenden sperrig macht)

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

Bewertung
0 lesenswert
nicht lesenswert
>Ist es theoretisch möglich das der Controller defekt ist? Kann man das
>testen? Es wird einfach nur noch eine Zeile mit schwarzen Kästchen
>angezeigt!

Brenn mal die HEX-Datei aus dem Anhang. Wenns damit nicht geht
stimmt was mit der Hardware nicht. Ist für ein 2x16 LCD compiliert.

Autor: lcd display (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so ich habs g ist eig echt lächerlich...
ein das Kabel an einer Datenleitung ist abgebrochen! hat man ganz 
schlecht geseh... Trotzdem Danke für eure Hilfe

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.