www.mikrocontroller.net

Forum: Projekte & Code LCD über nur einen IO-Pin ansteuern


Autor: Peter Dannegger (peda)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Oftmals möchte man ein LCD anschließen und hat aber nur wenige Pins 
frei.
Ein LCD braucht aber mindestens 6 IOs.

Die Lösung, man nimmt nen kleinen ATtiny und kann dann bequem per UART 
die Daten ans LCD senden.

Anbei mal der Schaltplan und ein vorläufiger Code mit fester Baudrate 
(9600Baud). Ich werds später auf Autobaud erweitern.

Der Code wurde auf nem ATtiny25 entwickelt, sollte mit kleinen 
Änderungen auch auf nem ATtiny13 laufen.

Für den UART-Empfang wird ein Pin des AVR doppelt verwendet. Daher der 
220R Widerstand, damit nicht 2 Ausgänge gegeneinander treiben.

Man kann aber auch nen RS232 Anschluß verwenden, dann muß der 4,7k 
Widerstand rein. Außerdem muß das Macro RX_INVERT definiert sein, damit 
die Polarität stimmt.

Da alle 6 IOs verwendet werden, empfiehlt es sich, vorher meinen 
Bootloader aufzuspielen, damit man auch in der Schaltung die Software 
neu flashen kann.


Peter

Autor: zebrafalke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man könnte auch einen pcf8575 als portexpander nutzen.

Autor: Uwe Bonnes (Firma: TU Darmstadt) (uwebonnes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist PCF8575 nicht TWI und braucht 2 Leitungen?

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Prima Peter! Das kommt mir gerade recht, da ich eine Steuerung mit einem
Atmega8515 gebaut habe und für ein Display kein "Platz" mehr frei war.

Frage: Wärest Du so gut, die fertige .hex-Datei hierher zu posten? Ich
kenne mich mit C überhaupt ´nicht aus und weiß daher nicht, wie und 
womit ich das Programm kompilieren kann.

MfG Paul

Autor: Stevko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,

auch ich habe schon mehrmals einen separaten Käfer für ein LCD verwendet 
um Pins zu sparen. Allerdings wird die Analyse Deines Codes bei meinen 
C-Kenntissen schon ein paar Tage daueren. Schade dass Du nicht in 
Assembler programmierst, da müsste ich nicht alles von C in asm 
umsetzen.

Aber 2 Fragen habe ich noch:

1. Auf dem Schaltplan legst Du die Kontrastspannung auf Masse. Ich habe 
auch schon das LCD EA DIP162 verbaut und es war bei mir immer ein 
Trimmer für VEE nötig. Schade das kein Pin mehr übrig ist, sonst könnte 
man die Hintergrundbeleuchtung mittels Transistor ausschalten.

2. Die Diode D2(wichtigste):
Für was ist sie da? Wenn an J2 eine Spannung anliegt dann leitet doch 
diese Diode nach Masse ab. Also nach meinem Verständnis eine Art 
Kurzschluß. Aber ich habe es schon in mehreren Schaltplänen gesehen nur 
leider verstehe ich den Sinn nicht. Ein paare kurze Erklärungen oder 
Stichpunkte wo ich suchen soll, würden mir schon helfen.

Gruß
  Stevko

Autor: ABC (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Stevko

>>2. Die Diode D2(wichtigste):<<

Meines Erachtens, sollte sie umgedreht eingebaut werden, damit sie die 
logische 1 einer RS232 Verbindung (zwischen -3V und -15V) nach quasi GND 
zieht.

siehe auch: http://de.wikipedia.org/wiki/EIA-232

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ABC wrote:
> @Stevko
>
>>>2. Die Diode D2(wichtigste):<<
>
> Meines Erachtens, sollte sie umgedreht eingebaut werden, damit sie die
> logische 1 einer RS232 Verbindung (zwischen -3V und -15V) nach quasi GND
> zieht.


Stimmt, es sind sogar beide Dioden falsch rum.

D1 verhindert Spannungen über VCC, funktioniert aber nur in Verbindung 
mit dem internen Pullup. D2 verhindert Spannungen unter GND.

Steuerst Du aber mit nem MC an, der an den gleichen 5V liegt, sind die 
Dioden überflüssig.


Peter

Autor: Stevko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter:

Vielleicht stelle ich mich heute besonders blöd an aber wenn Du D1 
drehst
und mit TTL auf J2 gehst, sperrt die Diode doch immer. So wie D1 jetzt 
eingebaut ist kann PB3 nicht nach "drausen" senden und die ankommende 
TTL wird um ca. 0,6V abgeschwächt. Das fand ich bis jetzt in Ordnung.
Wenn Du D2 drehst, dann würde ich es verstehen aber auch D1?

RS323 ist doch:
 1 = -3V .. -25V
 0 = +3V .. +25V

Dann wäre doch eine "0" gleich 4.4V und im Soft-UART drehst Du es wieder 
um.

Gruß
 Stevko

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier:
http://elmicro.com/de/seriallcd.html

habe ich industriell hergestellte serielle Display's gefunden. Die sind 
ganz anständig teuer. Da ist die Lösung von Peter einfacher.

MfG Paul

Autor: ABC (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die EA DOGM's sind dagegen mit ca. 10Euronen fuer ein 2x16 Display recht 
preisguenstig. Sie laufen mit 4Bit, 8Bit oder SPI Interface und 
ausserdem direkt an 3.3V. Nur ein Backlight muss man sich noch dazu 
besorgen.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Peter Dannegger (peda)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So, ich habs endlich mal fertig gestellt.

Die Baudrate wird von 1000 .. 60000 Baud erkannt.

Obwohl das Programm nur 1k groß ist, muß man den ATtiny25 verwenden.
Das Problem ist ja, daß die Timer nur 8bittig sind, aber möglichst ein 
Zählwert >100 für 1% Fehler eingestellt werden sollte.
Das ist bei beliebigen Baudraten nicht mit dem ATtiny13 machbar. Erst 
der ATtiny25 kann den Prescaler in 2-er Potenzen einstellen.

Auch hat der ATtiny25 dann Platz für den Bootloader, den man besser 
verwenden sollte, wenn man alle 6 IOs benötigt.

Man könnte auch den ATtiny24 nehmen, der hat ja nen 16Bit Timer. Da muß 
man dann nicht am Prescaler spielen.


Das Kommandointerface ist ganz einfach, nach 'c' kann man ein Kommando 
senden, nach 'd' Daten.

Außerdem kann man nach 'C' bzw. 'D' alles als 2 Hex-Digits senden.
Das ist insbesondere für PC-Modder interessant, die ein LCD einfach über 
die UART ansprechen wollen.


Peter

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,

nun habe ich schon das genze Forum durchsucht,
finde aber leider nur dieses hier.

Mit diesem Code kann man nur über das 1wire empfangen, aber nicht 
senden,
wie bei deinem Bootloader.

Könntest Du mir da mal etwas auf die Sprünge helfen?

Gruß Tobi

Autor: Christian. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Peter,
tolles Projekt! Ist denn der Schaltplan jetzt so, wie er sein soll. Ich 
habe das hin und her mit den Dioden nicht ganz verstanden. Wenn der 
Schaltplan nicht korrekt ist, wurde ich mich über eine Aktualisierung 
freuen.
Grüße
Christian

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian. wrote:
> tolles Projekt! Ist denn der Schaltplan jetzt so, wie er sein soll. Ich
> habe das hin und her mit den Dioden nicht ganz verstanden. Wenn der
> Schaltplan nicht korrekt ist, wurde ich mich über eine Aktualisierung
> freuen.

Ja, editieren von Projekten geht hier nicht.

Das aktuelle Projekt findest du hier:

http://www.avrfreaks.net/index.php?module=Freaks%2...


Peter

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter
Kann man mit der AutoBaud-Funktion in anderen Kontexten auch ohne 
externen Oszillator bei guter Qualität über RS232 senden, nachdem der 
UART eingestellt ist?

Autor: Uwe S. (de0508)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe den Quellcode mal auf avr-gcc mit einem Makefile angepasst.

Sind diese Fuse-Bits ok:
# 8MHz, mit Bootloader von Peter und RESET ist noch enabled.
-U lfuse:w:0xe2:m -U hfuse:w:0xdd:m -U efuse:w:0xfe:m

# 8MHz, mit Bootloader von Peter und RESET ist disabled.
-U lfuse:w:0xe2:m -U hfuse:w:0x5d:m -U efuse:w:0xfe:m 

Orginal Code stammt von hier:

http://www.avrfreaks.net/index.php?module=Freaks%2...

Autor: Uwe S. (de0508)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forum,

nach einigen Anpassungen läuft nun die 1-Wire LCD Anzeige mit dem 1-Wire 
Bootloader "fastboot-2.9" von Peter_Danneggers.
Danke Peter.

Hier noch alle nötige Quelldateien, Ergänzungen und Beschreibung zum 
Bootloader "fastboot-2.9".

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.