AVR 1-Wire Slave mit seriellem LCD-Display

Dieses Projekt habe ich bereits 2010 entwickelt und damit die erste wirklich vollständige AVR basierte 1-Wire Slave Implementierung veröffentlicht, die das strikte 1-Wire Timing zumindest einigermaßen einhält. Eine Verbesserung des Timings ist aufgrund der maximalen Taktrate des Mikrocontrollers wahrscheinlich nicht möglich.

In dem Projekt wird der generische 1-Wire Slave über eine serielle Verbindung mit einem Controller für ein LCD-Display gekoppelt, sodass dieses Display vollständig über 1-Wire gesteuert werden kann.

Prototyp

Das Projekt besteht aus zwei Teilen:

  • 1-Wire Slave, ein ATTINY45 Controller
  • LCD-Display mit Controller, ein ATTINY2313

Diese beiden Teile sind verbunden und kommunizieren über eine bidirektionale serielle Verbindung mit 115200 Baud.

Teil 1: 1-Wire slave

Der 1-Wire Slave ist als Softwareimplementierung auf einem Atmel ATTINY45 Controller ausgeführt. Ein DS2401 Chip sorgt für eine eindeutige ID auf dem Bus, ohne die Firmware anpassen zu müssen. Das Timing erfüllt relativ gut die Spezifikation, ist aber nicht zu 100% getestet. Aufgrund des asynchronen Busses, der von einem fest getakteten Mikrocontroller bedient wird, gibt es eventuell minimale Abweichungen.
Der serielle Port ist ebenfalls als Softwareimplementierung ausgeführt. Nach dem Power-On-Reset wird hier einiges an Debug-Informationen ausgegeben. Für die Fehlersuche kann das nützlich sein. In der LCD 1-Wire Protokollbeschreibung sind die Kommandos beschrieben, mit denen das LCD-Display gesteuert werden kann. Alle Kommandos und Daten sind mit CRC16 Integritätsgeschützt, um Übertragungsfehler auf dem Bus auszuschließen. Als zusätzliche Funktion kann auf den internen 2048 Bit EEPROM des ATTINY45 mit den Standard-Kommandos für iButtons zugegriffen werden.

Der Quellcode für den ATTINY45 kann hier heruntergeladen werden.

Teil 2: Serielles LCD-Display

Teil 2 des Projektes verbindet ein HD44780 kompatibles LCD-Display mit einem seriellen Port. Die Ansteuerung übernimmt dabei ein ATTINY2313. Der Teil kann auch allein verwendet werden, sofern man ein LCD-Display über einen seriellen Port ansteuern will. In der LCD seriellen Protokoll Beschreibung sind alle Kommandos zur Steuerung des Displays beschrieben. Auch hier ist alle Datenübertragung über die serielle Schnittstelle mit CRC16 geschützt.

Für die Ansteuerung einer Hintergrundbeleuchtung steht ein PWM-Ausgang zur Verfügung der ebenfalls mit seriellen Kommandos bedient werden kann. Die Helligkeit wird mit einem 8-Bit Wert eingestellt und automatisch langsam angepasst.

Der Quellcode für den ATTINY2313 kann hier heruntergeladen werden.

Projektbesonderheiten

  • nur ein Pin notwendig, um ein LCD-Display anzusteuern
  • kann in bestehende Schaltungen integriert werden
  • Datenübertragung mit CRC16 geschützt
  • bidirektionale Kommunikation
  • Steuerung der Hintergrundbeleuchtung möglich
  • interner ATTINY45 EEPROM nutzbar über iButton Protokoll

Das Schaltbild für Teil 1 und 2 zusammen ist zum Download hier verfügbar.

1wire-slave-lcd-schematics

 

Bekomme Updates per Email

Loading