PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ApplicationBoard1 für Protobed Mega 16 -32



darwin.nuernberg
29.12.2004, 16:25
[highlight=yellow:ef3e4005b7]ApplicationBoard1 für Protobed Mega 16 -32[/highlight:ef3e4005b7]

Erweiterungsbaustein für RNB Boards
(Am besten für mein Protobed https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=4890)

2 x 16 Zeichen LCD im 4-Bit Modus
PLUS
I²C Portexpander mit PCF 8574
8 LEDs für Anzeige / Ausgabe
8 Taster für Eingaben


https://www.roboternetz.de/phpBB2/album_pic.php?pic_id=809
Übersichtlicher Aufbau.
Die Taster und LED's können mit dem darüber liegenden
LCD in Beziehung gebracht werden...

Ausfühliche und detailiert beschriebene Bauanleitung (natürlich getestet)


[highlight=yellow:ef3e4005b7]Ab sofort im Download verfügbar[/highlight:ef3e4005b7]
https://www.roboternetz.de/phpBB2/dload.php?action=file&file_id=201

Meine Protobed-Serie:
Weitere Projekte von mir
...sind ab sofort auf meiner Nickpage verlinkt.
(https://www.roboternetz.de/phpBB2/nickpage.php?user=darwin.nuernberg)Dann muss ich nicht alle meine alten Beiträge korrigieren.
Es lohnt sich bestimmt, sich diese auch anzusehen.

darwin.nuernberg
29.12.2004, 16:26
Hier werden (falls Notwendig) in unregelmässigen Abständen [highlight=yellow:09ca723bda]Tipps[/highlight:09ca723bda] veröffentlicht


[highlight=yellow:09ca723bda]Demoprogramm[/highlight:09ca723bda] (ist auch in der Doku bereits enthalten)
Appbrd-Demo1.bas

'ApplicationBoard 1
'Protobed ATmega16-32
'
'AppBrd-1 LCD Header an Portobed ATmega 16-32 Port-C angeschlossen
'AppBrd-1 I2C Header an Portobed ATmega 16-32 angeschlossen

'================================================= ================

' CPU konfigurieren
$regfile = "m32def.dat"
$crystal = 16000000 ' Quarzfrequenz

' I2C konfigurieren
Config Scl = Portc.0 ' Ports fuer IIC-Bus
Config Sda = Portc.1

' Konstanten definieren
Const Appbrd_adr = &H42 ' Adresse des PCF8574 A0 auf ON
Const Appbrd_adr2 = &H43 ' Adresse des PCF8574 A0 auf ON

Const Text1 = "Applicat.Board 1"


' LCD konfigurieren
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2

' Variablen deklarieren
Dim M As Byte
Dim N As Byte
Dim X As Byte

I2cinit ' I2C - BUS initialisoeren
Initlcd ' LCD initialisieren
Display Off ' LCD Anzeige ausschalten
Cls ' LCD löschen
Cursor Off Noblink ' Schalte den Cursor aus

Display On ' LCD Anzeige einschalten

I2csend Appbrd_adr , 0 ' den PCF8574 auf 0 stellen (alle LED aus)

' Variablen initialisieren
M = 0
N = 0
X = 0

Locate 1 , 1 ' Cursor auf 1. Zeile, 1. Spalte setzten
Lcd Text1 ' Ausgabe von Text1 auf LCD

Locate 2 , 1 ' Cursor auf 2. Zeile, 1. Spalte setzten
Lcd "Demonstration" ' Ausgabe von "Demonstration" auf LCD

Wait 3 ' kurze Pause

Einsprung:
M = 0
N = 0
X = 0


Cls ' Anzeige löschen
Wait 1
Locate 1 , 1 ' Cursor auf 1. Zeile, 1. Spalte setzten
Lcd "Achte auf ......"
Locate 2 , 1 ' Cursor auf 1. Zeile, 1. Spalte setzten
Lcd " die LED's"
Wait 1

Do

For N = 0 To 7
M = 2 ^ N
I2csend Appbrd_adr , M ' den PCF8574 Daten senden
Waitms 100 ' kurze Zeit zum gucken ;-)
Next N
X = X + 1 ' Zähler erhöhen
Loop Until X >= 10 ' solange wieder holen bis die Bedingung erfüllt ist

I2csend Appbrd_adr , 0 ' den PCF8574 auf 0 stellen (alle Ports aus)

Cls ' Anzeige löschen
Wait 1
Locate 1 , 1 ' Cursor auf 1. Zeile, 1. Spalte setzten
Lcd "Noch einmal ? "
Locate 2 , 1 ' Cursor auf 1. Zeile, 1. Spalte setzten
Lcd "JA NEIN"

I2csend Appbrd_adr , &B10000001 ' den PCF8574 stellen 1. und letzter Port

Do
I2creceive Appbrd_adr2 , N ' Beachte es können nur Ports abgefragt werden
If N = 128 Then ' welche einen HI Pegel haben
Exit Do ' Der PCF meldet aber die Summe der aktiven Bits
End If ' Werte der Bits beachten

Locate 2 , 6
Lcd "["
Lcd N
Lcd "] "

Loop Until N = 1
I2csend Appbrd_adr , 0 ' den PCF8574 stellen alle Ports aus

If N = 128 Then Goto Einsprung

Cls

Locate 1 , 1 ' Cursor auf 1. Zeile, 1. Spalte setzten
Lcd "Jetzt Tasten "
Locate 2 , 1 ' Cursor auf 1. Zeile, 1. Spalte setzten
Lcd "druecken ["

M = &B11111111 ' Binäre Darstellung alle Ports auf HI
' ' Hexadezimal ginge es so M = &HFF
' ' und selbtverfreilich auch in dezimal M = 255

I2csend Appbrd_adr , M ' den PCF8574 Daten senden (alle Ports an)


Do
I2creceive Appbrd_adr2 , N
Locate 2 , 11
Lcd N
Lcd "] "
Waitms 10
Loop


End 'end program


[highlight=yellow:09ca723bda]Demoprogramm[/highlight:09ca723bda] (ist auch in der Doku bereits enthalten)
Appbrd-Demo2.bas


'ApplicationBoard 1
'Protobed ATmega16-32
'
'AppBrd-1 LCD Header an Portobed ATmega 16-32 Port-C angeschlossen
'AppBrd-1 I2C Header an Portobed ATmega 16-32 angeschlossen

'================================================= ================

' CPU konfigurieren
$regfile = "m32def.dat"
$crystal = 16000000 ' Quarzfrequenz

' I2C konfigurieren
Config Scl = Portc.0 ' Ports fuer IIC-Bus
Config Sda = Portc.1

' LCD konfigurieren
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2

' Prozeduren deklarieren
Declare Sub Prog1
Declare Sub Prog2
Declare Sub Prog3
Declare Sub Prog4
Declare Sub Prog0
Declare Sub Flash(byval Z As Byte)

' Konstanten definieren
Const Appbrd_w_adr = &H42 ' Adresse des PCF8574 zum schreiben (ADR - A0 auf ON)
Const Appbrd_r_adr = &H43 ' Adresse des PCF8574 zum lesen (ADR - A0 auf ON)

' I2C initialisieren
I2cinit ' I2C - BUS initialisoeren
' Slave initialisieren
I2csend Appbrd_w_adr , &B00000000 ' den PCF8574 auf 00000000

' LCD initialisieren
Initlcd ' LCD initialisieren
Display Off ' LCD Anzeige ausschalten
Cls ' LCD löschen
Cursor Off Noblink ' Schalte den Cursor aus

Display On ' LCD Anzeige einschalten


' Variablen deklarieren
Dim M As Byte
Dim N As Byte
Dim X As Byte


' Hauptprogramm
Do
Locate 1 , 1
Lcd "Programm waehlen"
Locate 2 , 1
Lcd "1 2 3 4 ENDE"
I2csend Appbrd_w_adr , &B10001111 ' Eingabemaskierung
' (Anzeige am Board Seitenverkehrt)

Do
I2creceive Appbrd_r_adr , N ' solange wiederholen bis
Loop Until N <> &B10001111 ' ein selektierter Port geändert wird

I2csend Appbrd_w_adr , &B00000000 ' den PCF8574 auf 00000000

Select Case N
Case &B10001110 : Prog1
Case &B10001101 : Prog2
Case &B10001011 : Prog3
Case &B10000111 : Prog4
Case &B00001111 : Prog0
Case Else : Call Flash(20)
End Select

Loop


Cls
Locate 1 , 1
Lcd N
Locate 2 , 1
Lcd "Ende"
End 'end program

' +++ +++ +++ +++ +++
' +++ +++ +++ +++ +++

Sub Prog1
Cls
Locate 1 , 1
Lcd "Programm 1"
Locate 2 , 1
Lcd "wurde gewaehlt"
Waitms 500
Call Flash(3)
Wait 1
End Sub

' +++ +++ +++ +++ +++

Sub Prog2
Cls
Locate 1 , 1
Lcd "Programm 2"
Locate 2 , 1
Lcd "wurde gewaehlt"
Waitms 500
Call Flash(3)
Wait 1
End Sub

' +++ +++ +++ +++ +++

Sub Prog3
Cls
Locate 1 , 1
Lcd "Programm 3"
Locate 2 , 1
Lcd "wurde gewaehlt"
Waitms 500
Call Flash(3)
Wait 1
End Sub

' +++ +++ +++ +++ +++

Sub Prog4
Cls
Locate 1 , 1
Lcd "Programm 4"
Locate 2 , 1
Lcd "wurde gewaehlt"
Waitms 500
Call Flash(3)
Wait 1

End Sub

' +++ +++ +++ +++ +++

Sub Prog0
Cls
Locate 1 , 1
Lcd "Programm ENDE"
Locate 2 , 1
Lcd "wurde gewaehlt"
Wait 2
Call Flash(10)
Cls
End
End Sub

' +++ +++ +++ +++ +++

Sub Flash(byval Z As Byte) ' Ein Lichterspiel von definierbarer Anzahl
For X = 1 To Z
I2csend Appbrd_w_adr , &HFF ' 11111111
Waitms 50
I2csend Appbrd_w_adr , &H00 ' 00000000
Waitms 150
Next X

End Sub

End

Frank
29.12.2004, 18:00
Hallo

Da es noch nicht freigeschaltet war hab ich es nochmal gelöscht. Du kannst es jetzt korrigiert uploaden.

Bitte vor dem posten unbedingt nochmal alles kontrollieren und testen. So gut es geht sollten doch Fehler vermieden werden, auch wenns nicht immer klappt.
Bei komplexeren Anleitungen ist es oft auch sinnvoll diese auf einer eigenen Homepage (falls du eine hast) abzulegen und hier im Download Bereich nur zu verlinken. Dadurch kannst du die einfach schneller aktuallisieren und ergänzen.

themaddin
01.06.2006, 20:50
Hallo Darwin!

Ich habe dein Application-Board erflogreich nachgebaut.
Ich habe mir, um Geld zu sparen ( 8-[ ), ein normales LCD gekauft. Ich dachte Adapter bauen ist ja kein Problem. :D Denkste!
Ich habe mir das LCD mit der Bestellnummer "LCD 162C LED" bei Reichelt für 7,50€ gekauft.
Aber dein Adapter-Board hat irgendwie nicht zu diesem Display gepasst. Auch kein Problem, habe ich mir schnell selber eins entworfen! Habe da dann noch gleich die Beleuchtung angeklemmt.
Leider muss man dieses Display so hoch stapeln, da es breiter ist.
Dann ist mir aufgefallen, dass dieses Display einen schlechten Kontrast hat wenn man den Pin dazu auf Masse legt, also hab ich noch ein Poti mit auf die Platte gepackt.
Das Display funktioniert soweit. Mit dem PCF8574 bin ich noch am kämpfen, irgendwie wollen 2 LEDs nicht. Mal sehen....

Woher hast du dein LCD? Würde vielleicht umrüsten...

Wenn man diese Schaltung nachbaut sollte man unbedingt ein Dil-LCD nehmen, wenn man die kompakte bauweise nicht missen möchte!

MfG
Martin

Edit: DIe Leds gehen jetzt! Typischer Fall von Verpolung! Aber erstmal ne halbe stunde fehler suchen.... :-b
Taster gehen auch! also geht alles!!! :)

darwin.nuernberg
02.06.2006, 19:24
Boh Ehy,
schön..sehr schön.

Ich hab das original LCD auch vom Reichelt... "LCD 162 DIP" €15,95

Ich hoffe Du stellst Dich anfangs nicht auch so blöd an wie ich....
Das LSB vom PCF ist links das verwirrt leider etwas beim proggen...

Naja wenn Du Probleme hast, ich bin ja da.....


PS Was hast du da links und rechts von Deinem Display als Abstandshalter verweindet? Müsliriegel??? :-b

themaddin
03.06.2006, 02:07
Was hast du da links und rechts von Deinem Display als Abstandshalter verweindet? Müsliriegel??? :-b
Das ist Balsaholz!!! Den Müsliriegel habe ich gegessen. :D
Ich wollte das Board auch eigentlich mit Schrauben befestigen, hab aber nicht so kleine da. Geht auch so.....

Programmiert habe ich noch nicht so viel, aber ich denke mal ich komme klar. Wenn nicht schrei ich.
:Haue

MfG
Martin