|
Latches
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
De Latches-print zorgt dat de vele schakelaars, de Ledrij (via de Aansturingsprint) en het Lcd-Display via de Databus structuur aangestuurd kunnen worden door de Arduino Mega. Een Latch (dit is Engels voor "Grendel") is een 1-bit onthouder (te vergelijken met "Memory"), die een signaal op zijn (data)ingang "D", vasthoudt en continue laat zien op zijn eigen (data)uitgang "Q". Het onthouden gebeurt op commando van een zogenaamde "Clock-signaal". Er zijn vele type van dit soort elementen, met elk zijn eigen IC-nummer. De hier gekozen type (nummer 74hct574) heeft 8 van zulke latches die met 1 clock signaal 8 bits (oftewel 1 byte) onthouden. Dit IC heeft bovendien de ingangen en uitgangen netjes op een rij. Nu kunnen alle ingangen van deze IC's aan de Databus worden verbonden. De Clock-ingang van elk IC bepaalt door wel IC de data van de databus wordt onthouden en continue wordt doorgegeven. Met de uitgangen van de diverse IC's kunnen andere elementen worden aangestuurd, zoals Leds of een schakelaar-aansturing (of andere taken).
Het Schema.Het idee achter het schema is eenvoudig: de bedienings-elementen in de bovenplaat zijn verdeeld in 3 hoofddelen. Elk deel krijgt zijn eigen groep geheugen-IC's die onthouden hoe het betreffende hoofddeel (op bit niveau) wordt aangestuurd. De drie hoofddelen, die hieronder afzonderlijk worden besproken, zijn:
Duidelijk is de dikke blauwe lijn in het schema te zien. Dit is de Databus, waarlangs de Arduino Mega zijn informatie doorstuurt naar de geheugen-IC's. Net als bij de schakelaars lijkt deze print een ingewikkeld iets te worden. Maar door elk hoofddeel goed gescheiden te behandelen, valt de complexiteit van deze print best mee.
Led Latch.De Led-Latch bestaat uit 2 Latch-IC's (IC1 en IC2) en een decoder (IC7) (74hct138). IC1 en de (lage) helft van IC2 sturen de kleuren van de Led-Rij aan. Elk groepje van 3 kleur-lijntjes (want RGB) wordt aangestuurd door 4 bitjes - waarvan de hoogste bit van elk groepje van 4 niet wordt gebruikt. De andere (hoge) helft van IC2 stuurt een 3-8 decoder aan om de Led-Nummer te bepalen. Dit verzekert ons dat er slechts 1 Led-nummer wordt geaktiveerd, wat resulteert in een lagere totale stroom, wanneer er (maximaal) 9 Led's branden. Gezamelijk gaan de Led-Kleuren en led-Nummers naar de Aansturingsprint, die de Led's in de Led-Rij uiteindelijk aansturen. De Clock-ingangen die deze Latch aansturen heten hier "Leds Col" en "Leds ColNr".
Lcd Latch.Het Lcd-Display vraagt een andere aanpak. Het display kent 8 databits en 3 control-aansluitingen. IC3 (Latch) zullen de 8 databits aansturen, IC4 (Latch) nemen twee control-aansluitingen voor zijn rekeningen. Er blijven 6 uitgangen van IC4 ongebruikt. Een consequentie van een overzichtelijk schema en aansturing door programmatuur (en dus snelle aansturing) willen hebben. De derde control-aansluiting is een Read/Write aansluiting van het Lcd-Display (pen 5). Het Display heeft de mogelijkheid om zich te laten uitlezen (Read). En via de hier gebruikte ontwerp structuur voor de Latch-print zou dit ook hier gebruikt kunnen worden. Het kost echter wel 1 IC extra - en dus ook extra ruimte op de print. Veel ontwerpen gebruiken het Lcd-Display alleen in de Write-mode. En dus wordt deze aansluting continue op Write gehouden. Het Lcd-Display heeft ook een aansluiting om de contrast in te kunnen instellen. Hier is dit mogelijk via een (liggende) instelbare potmeter (P1 - Lcd Contrast). In de ArSid is deze potmeter bereikbaar via een gaatje in de bodem. De Clock-ingangen die deze Latch aansturen heten hier "Lcd Data" en "Lcd Ctrl". Het Lcd-Display heeft een RGB-achtergrond verlichting. Er was oorspronkelijk gepland dat deze direct door de Arduino Mega wordt aangestuurd. Later is besloten om de aansluiting via de Latches-print (Lb, Lg, Lr, L+) te laten gaan, om uiteindelijk toch nog bij de Arduino mega uit te laten komen.
Schakelaar LatchHet schakelaar matrix heeft weer zijn eigen aanpak. Naast een Latch is er iets nodig om informatie van de schakelaar-standen weer naar de databus terug te kunnen sturen. Ook hiervoor zijn er diverse IC's beschikbaar. Hier heb ik gekozen voor een bi-directionele tri-state data-buffer IC (74hct245) (IC6). Net als bij de Latch-IC's liggen hier de ingangen en uitgangen netjes naast elkaar. Normaliter kunnen digitale IC-uitgangen maar 2 standen aannemen. Laag (0V) en Hoog (+5V) - waardes (en namen) die ook bekend zijn bij het programmeren van de Arduino. Dit buffer-IC kent ook nog een derde toestand, namelijk: hoge impedantie. Dit is te beschouwen dat de uitgang geheel wordt "losgekoppeld" en de aansluiting totaal geen invloed heeft op de rest die op deze uitgang is verbonden. Met zo'n 3-state buffer is het dus mogelijk om data terug te sturen naar de (blauwe) Databus en dus door de Arduino Mega te laten inlezen. De Arduino zelf zal dan eerst de betreffende aansluitingen op "Ingang" mogen zetten, voordat het de data kan teruglezen. De Latch-IC zelf (IC 5) stuurt met de 4 laagste bitjes 2 decoder-IC's aan (74hct138 - een 3-8 decoder) (IC8 en IC9). Het hoogste bitje hiervan bepaald welk IC aktief wordt. De decoder-IC's bepalen welke schakelaar rij wordt geaktiveerd. Wanneer er dan een schakelaar op AAN wordt gezet, zal het aktieve signaal (via de schakelaar-diode(s)) worden teruggestuurd naar de data-buffer-IC (IC6). Zoals eerder is geschreven is de data-buffer er 1 van het type "bi-directioneel". Of te wel, er kan data de ene kant op EN de andere kant op (echter niet tegelijk). Er is een aansluiting op dit IC (pen 1) die bepaalt welke kant de data op mag gaan. Hier op de Latch-print mag de data alleen van rechts (poort B) naar links (poort A) gaan. Daarvoor moet pen 1 Laag worden gehouden. Een "Enable" signaal (pen 19) zet de poort dan open, zodat de data daadwerkelijk van poort B naar poort A kan gaan (en dus richting de Arduino). Wat bij de data-buffer ook nodig is, is dat de ingangen een vaste waarde krijgen, zelfs als geen enkele schakelaar op "Aan" staat. Het weerstand netwerk R2 zorgt ervoor dat de ingangen van de data-buffer continue met de +5V is verbonden en dat de ingangen een HOOG te zien krijgen als een enkele schakelaar (van een rij) op Aan staat. De Clock-ingangen die deze Latch aansturen heten hier "Schakelaars In" en "Schakelaars Out" - met de opmerking dat "Schakelaars In" in feite geen Clock-ingang is maar een Enable-ingang.
Het print ontwerp.Wat aan de print opvalt is de hoek die er links-onder uitgehaald is. In deze hoek zit het afschermschot van de trafo en deze ruimte kan dus niet worden gebruikt om elektronica op te solderen. Wat ook opvalt is de vele aansluitringen: Links naar de Arduino Mega en het Lcd-Display; rechts naar de Led Aansturing; boven naar de schakelaars. De aanslutingen moeten ook op deze plekken zitten, want op de plaats waar nu de IC's zitten, daarboven komt de print van de Led Aansturing - er is daar dus geen enkele ruimte voor draden en aansluitingen. Het print ontwerp vergde nog behoorlijk wat puzzle en schuifwerk om het geheel nog enigzins compakt te krijgen. De plus (+5V) en de min (0V) zijn duidelijk aangegeven met resp. de kleuren rood en zwart. De andere draadjes zijn wel aangegeven, maar doordat er diversen recht boven elkaar lopen is het schema nodig om te zien welk draadje nu welke pennen met elkaar verbindt. De gehele (dikke blauwe) Databus is in het print ontwerp aangegeven door een rijtje van 8 soldeer-punten. Bij de feitelijke print is hier een kabelboompje te zien van groen/wit en groen/zwart draad. Net als bij de schakelaars geldt hier: het solderen van draadje voor draadje, bitlijn voor bitlijn vergemakkelijkt het behouden van het overzicht. Want met alle draadjes zo bij elkaar is er achteraf geen touw meer aan vast te knopen. Op de print zijn ook de blauwe ontkoppel condensatoren (IC1 .. IC7 - de blauwe druppeltjes) zijn duidelijk te zien.
Het testen.Nog voordat er een IC in de voetjes is geprikt, is als eerste getest of de plus (+5V) en de min (0V) daar aangesloten zijn, waar ze zijn gepland. Daarna is met de Ohm-meter doorgemeten of de diverse aansluitingen correct zijn en of er geen kortsluitingen zijn. Als volgende test is het Lcd-Display aangesloten. Het Blink-programma is geladen en de achtergrondverlichting blinkte er vrolijk op los. Ook is de Lcd Contrast getest, op de foto te zien als 2 groene balkjes, waar de tekens op zullen verschijnen. De Latches-print is aangesloten op de Arduino Mega en daarna is het een questie van de IC's er 1 voor 1 in prikken om elk hoofddeel op juiste werking te testen. Maar eerst enkele opmerkingen over het test programma. Wat meteen opvalt aan de laatste algemene funkties zijn het direkt aansturen van de Arduino-poorten met de variabelen DDRx en PORTx (met op de plaats van de x de letter van de betreffende poort). Eerst is er een eerste test programma gemaakt met gebruik makend van de standaard Arduino funkties "pinMode()" en "digitalWrite()". Op zich werkt dat wel op bitjes-niveau. Maar op byte-niveau is er 8 keer een IF-ELSE-statement nodig om een complete byte weg te kunnen schrijven. Met een databus en adresbus structuur wordt er al gauw met bytes gewerkt, in plaats van losse bitjes. We hebben het hier niet over een regel-toestel met allemaal losse I/O elementen, c.q. sensorren, maar over een computer-achtig iets, waarbij de Arduino als CPU wordt "mis"bruikt. Daarnaast zijn er eenvoudige funkties nodig om bytes weg te schrijven naar de databus en op te nemen in een bepaalde Latch-register. De registers hebben hier nog geen eigen adres, elke clock wordt apart aangestuurd. De Decoder-eenheid moet elke aparte clock verbinden met de adresbus-structuur. Ook is elke Clock-ingang flank gevoelig, zodat de registers alleen data in zich opnemen wanneer de Clock gaat van LAAG naar HOOG. De eenvoudige funkties hebben namen als:
Kanttekening: Bij de eerste test worden bij zowel write_data() als read_data() de waarde AA (een getal van 0 tot en met 7) eerst omgezet in het aktief maken van het juiste bit-nummer (met behulp van de constante array "BITJES"). Uiteindelijk wordt de adres AA rechtstreeks op de Adresbus gezet.
Led LatchesZoals de foto's laat zien geeft het testen een chaos in de ArSid. De reden hiervoor is dat voor de LedRij de Aansturing erbij nodig is. Maar deze print kan nog niet op zijn plaats worden gemonteerd, omdat de Latches hieronder zitten. Een opgevouwen A4 moet voor de nodige isolatie zorgen. Bij het maken van het test-programma blijkt weer dat ik de digitale aansluitingen van de Arduino Mega nog steeds erg onlogisch vind, niet alleen zijn de poort-pinnen "gebroken" verdeeld, ook staan de volgorde niet consequent op de pinnen 22 tot en met 53. Begint de Poort A met het hoogste bitje (nr 7), Poort C en Poort L (en de andere poorten) beginnen met het laagste bitje (nr 0). Na wat looplicht-effecten, loops en FOR-lussen, is een test-programma gemaakt waarbij 4 potmeters bepalen welke Leds branden en in welke kleur. De LedRij is verdeeld in 3 groepen, elke groep krijgt dus een kleur-potmeter. De kleur instellen gaat hier eenvoudig door de Rode, Groene en Blauwe Led(s) aan of uit te zetten. Het nummer in de groep gaat met de vierde potmeter, lopend vanaf 0 tot en met 7. Hiermee worden de Lednummers van alle groepen beïnvloedt Na wat draaien aan de potmeters is de conclusie dat dit deel van de Latches werkt. Met dit deel is meteen een potmeter-test gedaan op zowel de Control-potentiometers als de Audio-Potmeters. De funktie Write_Led() regelt dat de 2 Led-registers worden gevuld met de 4 (overzichtelijkere) parameters.
Lcd Latches.Het testen van de Lcd Latches gaf minder moeilijkheden. Een tekst, als "ABCDE", is zonder problemen naar het display geschreven. Daarna is er de tekst "ArSid Latch Check" van gemaakt. Toen kwam het idee om de potentiometer waardes naar de Lcd toe te schrijven. De potentiometers geven een waarde van 0 t/m 1023 (decimaal). Een eenvoudige deling maakt hier een getal van $0 t/m $F van. Met de nodige spaties ertussen passen de 16 cijfers keurig op de 20 posities. De volgende Lcd Funkties zijn erbij gekomen:
Daarnaast zijn er de volgende Funkties:
Wat behouden is, is het wegschrijven van de potentiometer-waardes naar de LedRij (P0, P1, P2 & P8) en de Lcd Backlight (P9).
Schakelaar Latches.De schakelaar Latches heeft iets meer moeite gekost om te testen. De uitgangs-decoder (2 * 74hct138) heeft het meteen gedaan, zoals gepland. Maar het weer inlezen heeft meer tijd gekost. Hier waren 2 oorzaken.
Na deze oplossingen is het testprogramma uitgebreid dat alle schakelaar standen ook op de Lcd worden getoond. Twee regels geven alle mogelijke schakelaars (meervoud) standen in. Elke schakelaar rij heeft in principe 2 cijfertjes (elk van $0 t/m $F) nodig - tenminste als het normale on-off schakelaars waren geweest. Nu nemen de (on-off-on) schakelaars (per rij) 2 uitgangen in, dus zijn er 4 cijfertjes nodig. De derde regel (gemerkt met "e') geeft alle laagste 4-bits weer, de vierde regel (gemerkt met "o") geeft alle hoogste bits weer. Daarna zijn de cijfertjes precies op volgorde (met spaties na elke 4 cijfertjes), zoals te verwachten is, dus schakelaar uitgang "0123 4567 89AB CDEF". Het aflezen van het display geeft nu precies aan, zoals de schakelaars aangeven. En er kan nu meteen getest worden dat elke schakelaar maar 1 bitje omlegt, in plaats van meerdere bitjes door verborgen sluitingen. De volgende funkties verzorgen het schakelaar gebeuren.
Het einde van de Latches Test.Nu alle (hardware-matige) funkties van de Latches uitgebreid is getest, is er nu iets om verder mee te "spelen" en te experimenteren. Een aanvulling is om van het Lcd Display het "Enable"-draadje ook terug te voeren naar een plaatsje naast de Latches-Ingang (die 6 polige "connector"), zodat er hardware-matig de benodigde verwerkingstijd van 40usec "afgeteld" kan worden, in plaats van een software-matige delay waarin het ArSid programma geen andere dingen kan doen. Dan is de Latches-print getest, goed bevonden en gereed verklaard. Op naar de volgende fase, de Decoder. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
De aansluitingen van LatchesDiverse tests van de Latches-print
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1: De broncode van De Led Latches(Sat 14 May 2016) Het testen van de LedRij (met de potmeters). Hierbij is de Aansturing nodig.
2: De broncode van De Lcd Latches(Sat 14 May 2016) Het testen van de Lcd (met de potmeters). Hierbij is de LedRij (en de Aansturing) gebruikt.
3: De broncode van De Schakelaar Latches(Sat 14 May 2016) Het testen van de Schakelaars. Hierbij is de Lcd nodig en zijn de Potmeters en de LedRij (en de Aansturing) gebruikt.
|
[Tekst] [Afbeeldingen] [Aansluitingen] [Broncodes] |