LEDDE matrisen med hjälp av SKIFT register (4 / 7 steg)
Steg 4: programvara
Susen
Ja, som allt, det finns ett trick. Tricket är att det aldrig finns mer än 8 Lysdioder tänds samtidigt.
För att detta ska fungera bra, behövs lite av crafty programmering. Konceptet har jag valt är att använda en timer avbryta. Här fungerar på displayen avbryta på ren svenska:
- Timer räknas upp till en viss punkt, när nått avbrottstjänstens rutin körs.
- Denna rutin beslutar vilken rad den nästa som ska visas.
- Informationen för nästa rad är tittade upp från en buffert och skiftade i kolumnen föraren (denna information är "låst" så det inte är inte ännu visas).
- Rad föraren är avstängd, ingen LED lyser just nu.
- Kolumnen föraren är "låst" make i den information vi skiftade i två steg sedan den aktuella informationen ska visas.
- Rad föraren sedan ger ström till den nya raden som vi visar upp.
- Avbryta tjänsten rutinmässiga ändarna och programmet återgår till normala flödet tills nästa avbrottet.
Detta sker mycket snabbt. Avbrottet kastas varje 1 MSEK. Detta innebär att vi uppfriskande hela displayen om en gång varje 8 mSec. Detta innebär en display andelen runt 125Hz. Det finns viss oro när det gäller ljusstyrka eftersom vi i huvudsak kör lamporna vid 1/8 intermittensfaktor (de är lediga 7/8 av tiden). I mitt fall får jag en tillräckligt ljusstark skärm med ingen synlig blinkande.
Full LED-display är kartlagt i en matris. Mellan avbryter matrisen kan ändras (vara medveten om atomicity) och kommer att visas på displayen under nästa avbrottet.
Bestämd skriva kod för AVR mikrokontroller och hur man skriver kod för att prata med Skift register är utanför omfånget för detta instructable. Jag har inkluderat källkoden (skriven i C och kompilerat med AVR-GCC) samt den hex filen att programmera direkt. Jag har kommenterat all kod så du bör kunna använda detta för att klara upp frågor om hur man får data in skiftregister och hur den rad uppdateringen fungerar.
Observera att jag använder en teckensnittsfil som följde med ks0108 universal C biblioteket. Biblioteket kan hittas här: http://en.radzio.dxp.pl/ks0108/
Uppdatering:
Skift register: Hur man
Jag har beslutat att lägga lite om hur till program med Skift register. Jag hoppas det klarnar saker för dem som inte har arbetat med dem innan.
Vad de gör
Skift register tar en signal från en tråd och ut denna information till många olika stift. I det här fallet finns det en data tråd som tar i data och 8 stift som kontrolleras beroende på vilka data som har tagits emot. För att göra saker bättre, finns det en outpin för varje skiftregister som kan anslutas till en annan skiftregister input stift. Detta kallas cascading och gör expansionen potentialen en nästan obegränsad möjlighet.
Kontroll stiften
Skift register har 4 kontroll stift:
- Spärr - detta stift berättar skiftregister när det är dags att byta till data som nyligen anges
- Data - 1 och 0 är talande skiftregister vad stiften för att aktivera tas emot på detta stift.
- Klocka - detta är en puls skickas från mikrokontroller som talar om skiftregister att ta en data behandling och flytta till nästa steg i kommunikationsprocessen
- Aktivera utgången - detta är en on/off knapp, hög = på, låg = av
Att göra det göra din budgivning:
Här är en snabbkurs i driften av ovanstående kontroll stift:
Steg 1: Ange spärren, Data och klockan låg
- Ställa in låset låg berättar skiftregister vi håller på att skriva till den.
Steg 2: Ange Data stift till logik värdet du vill skicka till SKIFT Register
Steg 3: Ställa in klockan pin hög, säger SKIFT Register att läsa i det aktuella Data stift värdet
- Alla andra värden för närvarande i skift Register kommer att flytta över av 1 plats, att skapa utrymme för logik nuvärdet av Data stift.
Steg 4: Ställ klockan pin låg och upprepa steg 2 och 3 tills alla data har skickats till skiftregister.
- Klockan PIN-koden måste anges låg innan du ändrar till nästa datavärde. Växla denna pin mellan höga och låga är det som skapar den "klocka puls" övergången registrera behov att veta när att gå till nästa steg i processen.
Steg 5: Ställ in spärren hög
- Detta berättar skiftregister att ta alla data som har flyttats i och använda den för att aktivera utgångsstift. Detta innebär att du inte kommer att se data som det skiftande i; ingen förändring i produktionen stift kommer att ske tills spärren ligger högt.
Steg 6: Ange aktiverar produktionen hög
- Det blir ingen pin utgång tills den aktiverar utgången är satt till hög, oavsett vad som händer med den andra kontroll tre stift.
- Detta stift kan alltid stå hög om du vill
Cascading
Det finns två stift kan du använda för CSS, Os och Os1. OS är för snabbt stigande klockor och Os1 är för långsamt stigande klockor. Koppla detta stift till nästa skiftregister data stift och spill från detta chip kommer att föras in nästa.
Slutet av uppdatering
Adressering displayen
Jag har skapat en matris på 8 byte kallas row_buffer [] i exempelprogrammet. Varje byte motsvarar en rad med 8 x 8 display, rad 0 är botten och rad 7 är toppen. Den minst signifikanta biten av varje rad är till höger, den mest signifikanta biten till vänster. Ändra displayen är lika enkelt som att skriva ett nytt värde till data arrayen, avbrottstjänstens rutin tar hand om uppfriskande displayen.
Programmering
Programmering kommer inte att diskuteras i detalj här. Jag vill varna er att inte använda en DAPA programmering kabel som jag tror du kan inte programmera chip när det körs på 12MHz. Alla andra standard programmerare bör fungera (STK500, MKII, Dragon, parallell/seriell programmerare, etc.).
Säkringar:
Se till att programmera säkringarna att använda 12MHz kristallen
hfuse: 0xC9
lfuse: 0xEF
I åtgärd
En gång du programmet chip displayen ska rulla en "Hello World!". Här är en video av ledde matrisen i åtgärder. Videokvaliteten är ganska låg eftersom jag gjorde detta med min digitalkamera video funktionen och inte en riktig video eller webbkamera.