* audio gebruikt onder creative commons licentie, zie youtube voor meer informatie.
De grafische controller doet drie dingen:
1) accepteert weergegeven instructies van een USB-poort (virtuele com poort compatibel met oude winamp plugins).
2) leest weergeven scripts van een SD-kaart Display scripts zijn gemaakt op een PC met behulp van de seq_txt programma (en broncode) verbonden aan dit instructable.
3) decodeert display instructies en stuurt ze naar de board(s) van de bestuurder.
USB
Het bestuur gebruikt een 28 pin PIC met USB hardware. Dit is super eenvoudig te implementeren met het stuurprogramma van de USB-CDC microchip. Ik heb niet de moeite genomen om dit te implementeren nog. Ik ben niet van plan om het te gebruiken en een beetje bedrog van het geheugen is vereist. De 18fX550 USB PICs hebben alleen 2K RAM-geheugen. Het FAT-bestandssysteem (zie hieronder) maakt gebruik van 2 512K buffers te lezen van de SD-kaart. Die is genomen uit de bovenste 1k normaal gereserveerd voor USB door het stuurprogramma van de microchip CDC. SO: aangezien USB gebruiken zal altijd voorrang (dwz SD kaart te spelen zal stoppen en de tabel wacht op instructies na USB ingestopt is) we kunnen gewoon de FAT geheugenbuffers hergebruiken voor de USB wanneer verbonden. Ook Opmerking: de USB-Vcc pin is eigenlijk verbonden met een PIC-pin. Dit is zodat we een USB-kabel zonder volledige opsomming (misschien?) kan detecteren.
SD-kaart
Animatiebestanden kunnen worden gemaakt met de seq_txt.exe (windows) programma (en broncode) gekoppeld aan dit instructable. De oorspronkelijke bestanden kunnen worden gevonden hier. Ik heb niet schrijven deze. Ik denk dat ze zijn gemaakt door instructables gebruiker Mathieu Roncheau. Haar een kale EXE-bestand van een onbekende bron. Gebruik op uw eigen risico (maar ik heb geen problemen). Klik op de vierkantjes in dit programma maken beelden die zal op de daft punk tabel weergeven, klikt u op ' >' om een nieuw frame. Klik op de schijf om te slaan van een vertegenwoordiging van de platte tekst van de beelden die u heeft.
Hier is een voorbeeld van het bestand dat met de afbeelding die wordt weergegeven in de onderstaande schermafdruk gaat:
1 2 4 8 16
Dit is de ASCII-weergave van het binaire equivalent van elke kolom, met de bovenkant als 0. De eerste kolom is 10000 = 1, de derde is 00100 = 4, enzovoort. Elke lijn vertegenwoordigt een frame, elke regel wordt beëindigd met de \r zowel \n.
Deze animatiebestanden worden gekopieerd naar een SD-kaart (zoals uw digitale camera gebruikt) net als elke andere schijf. De controller accepteert SD-kaarten in een van de gemeenschappelijke formaten (FAT12/16/32) dankzij een uitgeklede versie van DOSFS door Lewin Edwards.
De controller wordt gelezen door alle de *.dpt (daft punk tabel) bestanden in de rootdirectory van de SD-kaart en 'speelt' elkaar. Wanneer alle bestanden worden gelezen begint het opnieuw aan het begin.
Weer decoderen
Het maakt niet uit hoe de gegevens in de controller krijgt, komt het als ASCII representaties van bitmapafbeeldingen. Bah.
We moeten de ascii-gegevens omzetten in een echte integer. In het voorbeeld hierboven de laatste wordt kolom (00001 binair) vertegenwoordigd door 16 in decimale notatie. 16 bestaat eigenlijk uit twee bytes op een PC - 1 & 6. Bovendien, deze bytes worden gecodeerd als ASCII, 1 is eigenlijk 0x31 en 6 is eigenlijk 0x36.
A) aftrekken 0x30 van elk cijfer (| = 0x30... xor?).
B) eerste cijfer aan nieuwe variabele X toevoegen
C) X met 10 vermenigvuldigen
D) tweede cijfer toevoegen, herhaal C & D zo nodig voor het verwerken van alle cijfers.
Zodra dat wordt gebeëindigd het is gewoon een kwestie van bonken de bits uit een paar pinnen.
Code Status
De code is gewoon nauwelijks Alfa. Ik wilde de PCB en code gepost omdat een paar mensen hebben geschreven uiting van belang. Het USB-stuurprogramma is nog niet geïmplementeerd en vereist enige aandacht naar de geheugenorganisatie. Het vet & SD libs werk geweldig, het leest bestanden in een lus zonder enig probleem, maar alleen FAT 16 is getest. De code heeft nog niet is verplaatst naar nette functies, zijn gewoon 'as is' van mijn eerste werkende prototype.
Toekomstige verbeteringen:
- USB-connectiviteit via CDC (virtuele com/seriële poort).
- Gebouwd in lettertype voor weergave als tekst zonder opmaak via USB of .txt-bestanden lezen van de SD-kaart.
- Gebruik gebouwd in lettertype voor berichtweergave NO CARD/BAD CARD.
- Foutafhandeling op SD leest en het ontleden van de animatie.
- ADC poorten bleven beschikbaar voor de controle van de snelheid van de beat detectie gebaseerd zijn.
- ADC/DIO poorten vrij voor schakelaars of potentiometers gelaten.
- Voeg lus en snelheid instructies naar de animatie script indeling... sinds bitmap waarden zijn altijd 0-31, een waarde van 32 zou kunnen leiden tot een lus van N keer bepaald door de volgende cijfer. Een waarde van 33 kunt opgeven voor een nieuwe vernieuwingsfrequentie (snelheid).
- Hardware test/power op zelf test (POST) - bytes schrijven in de expander IO en uitvoer lezen van laatste bord in de keten. Als bytes uit = bytes in dan hardware goed functioneert (vereist lus-back verbinding met laatste output expander bestuur in de keten).
Hardware-overzicht
PCB en circuit zijn in Cadsoft Eagle formaat.
Firmware geschreven met MPLAB & C18-compiler.
Voor de geeks: de microcontroller is een 28 pin 8 bit PIC18f2550 met USB hardware en 2K ram. Het draait bij 5 volt want op nood 48 MHZ te doen van de USB-interface (via een 20Mhz kristal). De SD kaart is 3,3 v alleen logica. De SD-kaart heeft een eigen 3,3 leveringen van een LM317 feed van de 5.1V gedeeld door de PIC en de LEDs. Het is niet strikt perfect, maar het werkt. De signalen naar de SD-kaart rond 3V zijn onderverdeeld met een 2.2K en 3,3 K weerstand-verdeler. De uitvoer van de gegevens van de kaart aan de PIC is liet kaal, de hoge 3,3 v is genoeg aan trigger Vh op de PIC. Ik pakte het voltage divider-ontwerp van de MikroeBasic compiler handleiding. Dit is niet een ideale regeling, ik moest snijden de SPI-snelheid naar klok/64 voordat ik betrouwbaar met de SD-kaart communiceren kon. Dit is het enige bewerking echter gelezen waar snelheid maakt eigenlijk niet uit dus het werkte perfect (en goedkope!).