Forum: Projekte & Code PCF8574 LCD TWI I2C Initialisierung Scanner Assembler ATmega8


von Bernhard S. (bernhard)



Lesenswert?

Geschätztes Forum,

ein kleines Assembler-Beispiel, wie ein LCD und ein PCF8574 per TWI / 
I2C initialisiert bzw.angesteuert werden kann.

Die vielen LEDs am SLAVE-Display dienten nur zu Versuchszwecken... 
schaut aber gut aus, dieses lustige gezappel :-)


TASTE-A: Der Master scannt den kompletten I2C-BUS und zeigt die 
vorhandenen Slaves an.

TASTE-B: Das externe Slave-Display am PCF8574 wird initialisiert.
(in diesm Beispiel wurde ein 4x16 Display verwendet, bein Bedarf muss 
die Initialisierungsroutine "MASTER_LCD_EXT.asm" entsprechend  angepasst 
werden).

TASTE-C: Ein TEXT wird zum externen Display gesendet.

TASTE-D: Der PIN-Zustand des PCF8574 wird ausgelesen und angezeigt.


Bernhard

von Schnittstelle (Gast)


Lesenswert?

Hallo Bernhard!
Ein sehr interessantes Projekt.
Da ich mich gerade mit Anzeigen und TWI beschäftige, habe ich ihre 
Schaltung aufgebaut und das Programm 1:1 in den Mega8 geflasht.

Den Mega8 betreibe ich mit Ext.Oszillator 16 MHz...und das funktioniert 
auch, der Mega wird mit AVR Studio 5.1 bearbeitet.

Dazu muss ich sagen dass ich ein Asm-Anfänger bin und außer ein paar 
kleineren Projekten keine großartige ASM-Erfahrung mitbringe.

Zu meinem Problem: Die Schaltung zeigt nach dem Einschalten keinerlei 
Reaktionen...weder LED noch LCD. Das LCD zeigt nur die üblichen 
Balken...also wird nicht inizialisiert.
Mit dem Debugger komme ich nicht über "rcall NEUSTART_MIT_WDR" hinaus.

Nach 3 Tagen verzweifelter Suche habe ich mich für diesen Schritt 
entschlossen ob mir vielleicht sie oder einer der vielen Profis im Web 
mit einem Tip weiter helfen könntet. Derzeit stehe ich total an!



Im voraus vielen Dank!

von Schnittstelle (Gast)


Lesenswert?

Habe vergessen: LCD ist das BlueLine Dotmatrix EA W164B-NLW

von Bernhard S. (bernhard)


Lesenswert?

>Die Schaltung zeigt nach dem Einschalten keinerlei
>Reaktionen...weder LED noch...

Die LEDs am Master müssen nach einem Reset kurzzeitig leuchten.

Die entspechenden PINS werden nach Programmstart auf Ausgang geschaltet 
und anschließend kurzzeitig gegen LOW.

Bernhard

von Schnittstelle (Gast)


Lesenswert?

Danke für die rasche Antwort.
Nein...LED leuchtet nicht auf...eventuell zu kurz. Werde mir das am 
Speicherscope ansehen! Ich melde mich später!

von Schnittstelle (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Bernhard!
Also ich habe mir die LED-Pins am Speicherscope angeschaut ausser einem 
Mini-Einschaltpuls mit 400 mV ist da nichts!

-Alle Verbindungen habe ich nochmals gemessen (auf sicheren 
Kontakt)...ok
-Externe CLK an Xtal1 schwingt sauber mit 2,44Vss

Hochohmig gemessen an den Pins:
-alle auf 5,01V
 außer
-Enable 4,12v
-alle drei LED's 4,3V
-Taster A,B,C,D 4,12V

Pullup R an den Tasterleitungen sind wahrscheinlich nicht geplant oder 
erforderlich..?!
Meine Schaltung sende ich zur Einsicht mit...Denkfehler, welche man 
selber immer wieder überliest sind immer möglich. Einzige Änderung zur 
gesendeten Schaltung ist die externe 16 MHz CLK.

Ich finde einfach keinen Ansatzpunkt mehr für weitere Untersuchungen.

Ich danke für ihre Mühe

von m.n. (Gast)


Lesenswert?

C3 ist wohl ein Restbetsand von C1 und C2, hier aber völlig unsinnig. 
Ersetze ihn durch 47 µF parallel mit 100 nF.
Vermutlich wird die Schaltung aber immer noch nicht funktionieren.

von Schnittstelle (Gast)


Lesenswert?

Danke, völlig richtig.
Habe ich aber gelassen da C4 und C6 ohnedies unmittelbar parallel 
daneben angeordnet sind.

von Schnittstelle (Gast)


Lesenswert?

Hallo !

In der Sequenz in Modul "Master_LCD_INI.asm" Zeile 279 habe ich das, 
nach meiner Meinung fehlende "rcall LCD_COMMAND" eingefügt:

vorher:
    ldi temp, 0b00000001        ; DISPLAY löschen
   rcall LCD_COMMAND
    ldi temp, 0b00001111        ; DISPLAY ein / CURSOR blinken
    ldi temp, 0b00001100   ; CURSOR aus
  rcall LCD_COMMAND
    ldi temp, 0b00000110        ; Cursor Auto-Increment
   rcall LCD_COMMAND

jetzt:
    ldi temp, 0b00000001        ; DISPLAY löschen
   rcall LCD_COMMAND
    ldi temp, 0b00001111        ; DISPLAY ein / CURSOR blinken
        rcall LCD_COMMAND
    ldi temp, 0b00001100   ; CURSOR aus
  rcall LCD_COMMAND
    ldi temp, 0b00000110        ; Cursor Auto-Increment
   rcall LCD_COMMAND

Leider hat das nichts geändert, Programm hängt nach wie vor.

von Bernhard S. (bernhard)


Lesenswert?

Flash mal bitte die original "MASTER.hex" aus der 
"2014-09-01_ASSEMBLER_OK.zip".

Ist der richtige µC in Deinem Programmer eingestellt?

von Schnittstelle (Gast)


Lesenswert?

Hallo Bernhard!

Danke für den Tip! Das war's!!!

Offensichtlich ist da was beim Unzip (RAR) passiert...keine Ahnung wie 
das Zustande gekommen ist...aber das hat mich nahezu eine Woche lang die 
Abende gekostet! Ich habe die Moduls jetzt einzeln verglichen, aber in 
der Geschwindigkeit habe ich den Kopier-Fehler noch nicht entdeckt.

Die LED's und die Tasten tun jetzt was sie machen sollen. Mit dem LCD 
muss ich mich noch auseinandersetzen, denn da mangelt es noch an der 
Config....aber dafür reichen meine ASM-Kentnisse und das LCD-Manual 
schon aus.

Nochmals vielen Dank für deine Mühe!

Ich wünsche dir alles Gute!

K.T.

von Wolfgang (Gast)


Lesenswert?

Schnittstelle schrieb:
> Ich habe die Moduls jetzt einzeln verglichen, aber in
> der Geschwindigkeit habe ich den Kopier-Fehler noch nicht entdeckt.

Dann probiere es doch mal mit WinMerge. Das findet den Unterschied 
zuverlässig und schnell.
http://winmerge.org/

von Schnittstelle (Gast)


Lesenswert?

Danke, werde ich machen.

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
Noch kein Account? Hier anmelden.