Atomic Windows
Met I2C een alfanumeriek display aansturen
Inleiding:
Het is alweer een tijd geleden dat ik met I2C aan het experimenteren ben geweest. Nu kwam ik laatst een printje tegen waarop 6 alfanumerieke LCD's geplaatst zijn welke door I2C aan te sturen zijn. Het begon weer te kriebelen en de vraag rees natuurlijk of ik dat printje aan kan sturen met de Atom. Zodoende ben ik weer aan de gang gegaan met I2C en zie hieronder het resultaat.
Display:
De gebruikte alfanumerieke LCD's bestaan elk uit 16 segmenten. De aansturing gebeurt per 2 LCD’s, dit heeft te maken met de gebruikte LCD controller. De opbouw van de displays is dan als volgt:
|
Byte 1 = a0 - a7
Byte 2 = b0 - b7
Byte 3 = A0 - A7
Byte 4 = B0 - B7
|
Er zijn dus steeds 2 bytes nodig voor elke display.
LCD controler:
Voor de aansturing van de displays zijn SAA 1064 chips gebruikt. Dit zijn dezelfde chips als beschreven in het eerder gepubliceerd artikel over I2C en een numerieke display van mij. Een SAA 1064 kan 16 segmenten aansturen, dit betekent dus twee numerieke displays (8 segmenten) of een alfanumeriek display (16 segmenten). Op het printje zijn 6 alfanumerieke displays geplaatst wat dus 3 stuks SAA 1064 vereist om deze aan te sturen. Een SAA 1064 heeft 2 vrije adreslijnen wat dus betekent dat men op een I2C bus 4 stuks SAA 1064 kan besturen.
Op het printje is een truc toegepast om toch meerdere van deze alfanumerieke printjes aan te kunnen sturen. Men plaatst 3 stuks SAA 1064 op 3 verschillende adressen maar op elke print zijn deze adressen gelijk. Daarnaast plaatst men een 8-bits I/O expander PCF8574 welke het SCL signaal kan blokkeren. Bij een power-up worden alle bitjes van een PCF 8574 op ‘1’ gezet en in dit geval gebruikt om de SCL te blokkeren. Om het SCL signaal door te geven moet men dus een bitje ‘0’ maken, anders wordt SCL niet doorgegeven waardoor de data niet veranderd. Een PCF 8574 heeft 3 vrije adreslijnen waardoor er dus 8 op een I2C bus aangesloten kunnen worden. In het totaal kan men dus 8 x 8 = 64 van deze alfanumerieke printjes met 6 displays aansturen.
I2C besturing:
De aansturing is in principe gelijk als die van de numerieke display en is terug te vinden in de data sheet van de SAA1064. Als eerste moet men dus SCL van de aan te sturen print vrijgegeven en daarna de data voor de SAA 1064 chips versturen.
Vrijgeven SCL:
Aansturen karakter 1+2:
| + |
Aansturen karakter 3+4:
| + |
Aansturen karakter 5+6:
| + |
S | = Startconditie |
WA | = Wacht op Acknowledge |
A | = Geef Acknowledge |
P | = Stopconditie |
Wanneer je de aansturing van karakter 1+2 bekijkt, komt Data1 overeen met a0-a7, Data2 met b0-b7, Data3 met A0-A7 en Data4 met B0-B7. De displays worden dus om en om geschakeld. De reden dat dit zo gebeurd heeft te maken met de hardware die dan eenvoudiger wordt. Voor karakter 3+4 en 5+6 geldt hetzelfde.
Software:
De besturing van het printje heb ik met Atomic Windows gedaan omdat dit vrij eenvoudig werkt en ik al zoiets gemaakt heb voor het numerieke display. In het programma zit een tabel waarin alle twee de bytes voor elk karakter opgeslagen is. De textboxen worden achter elkaar geplaatst zodat het een string wordt, inclusief 6 extra spaties.
Wanneer er op de ‘Go’-knop gedrukt wordt begint de tekst op het display te scrollen.
Het scherm ziet er als volgt uit:
Met de linker schuifregelaar kun je de helderheid van de displays en met de rechter de snelheid van de tekst instellen. In de textbox kun je de tekst invullen welke op het display voorbij scrolled.
Dit was het weer voor deze keer, tot de volgende keer
Kees van Oss
|