Stap 18: Softwareontwerp
De broncode van het uiteindelijke project ook vindt u hieronder. Echter het IR commando codebestand leeg is en moet worden ingevuld met behulp van dezelfde gegevens je uit de stap "Vastleggen van IR afstandsbediening Data". Zodra u vult dat in, u moet zitten kundig compile-upload-run het.De code zal spelen alle bestanden op uw SD-kaart wortel woninggids. De bestanden zullen alfabetisch worden gesorteerd. Mijn broncode heeft een aantal extra functies zoals de weergave volume wanneer het verandert en de huidige bestandsnaam, het lied lengte en de huidige tijd in het liedje. Volg de broncode om te begrijpen hoe elke functie werkt.
De music player zal niet kunnen spelen van muziek terwijl aangesloten op een computer als een USB-apparaat voor massaopslag. Dit is omdat SCSI (herinner ik eerder al noemde?) werkt op blokken van ruwe data op de SD-kaart direct maar de module van de FatFs we gebruikt in de cache opgeslagen gegevens in RAM, dus te veranderen met behulp van USB zal ertoe leiden dat de gegevens door gebruikte FatFs out-van-sync met de echte gegevens.
Hoewel ik wilde gebruiken USB verbinding en disconnect-gebeurtenissen voor het automatisch detecteren al dan niet toestaan van FatFs toegang tot de SD-kaart, ik kan niet vanwege de manier waarop de Teensy ++ is ontworpen. Er zal altijd een spanning op VBUS, waardoor de gebeurtenissen nutteloos. Dus om te schakelen USB toegang, moet u in het menu van de klok om te kunnen gaan.
Er is een timer genaamd de "één schot timer", die een gebeurtenis slechts één keer wordt geactiveerd na een bepaalde hoeveelheid tijd. Dit wordt gebruikt om de huidige tijd tonen op het LCD-scherm na enkele andere ding is weergegeven op het LCD-scherm. Dus als u het volume wijzigen, op zal uiterlijk vertoon van het volume, en na 3 seconden gaat het gaat terug naar de tijd worden weergegeven.
Een andere timer is een timer 0, die is geprogrammeerd om elke seconde een gebeurtenis is gestart, dit houdt spoor van tijd intern zodat we niet hoeven te vaak de DS1307 opvragen. Dit wordt het alarm ook gestart wanneer de tijd komt overeen met.
Ik heb een korte aanhangsel op timers, check it out check.
Al het drukken van de LCD is gedaan met de tekenreeks die is opgeslagen in het flash-geheugen, is dit soort van traag in vergelijking met het gebruik van de RAM. Ik heb de programmeerstroom om te werken alleen het LCD-scherm tijdens perioden wanneer de decoder bezig met het is gestructureerd. De snaren worden opgeslagen in flash, omdat het RAM-geheugen is meer waard, dat het is een goede gewoonte om altijd niet veranderende tekenreeksen op te slaan in flash.
Alle instellingen worden opgeslagen, hetzij aan de DS1307 gebruiker RAM (dat is batterij back), of van de AVR interne EEPROM (zie bijlage voor meer details). Deze instellingen zijn geladen en gevalideerd bij het opstarten, en opgeslagen als de decoder bezet is.
Als je al de bestanden graven, kan je test functies die ik gebruik voor het testen van verschillende afzonderlijke onderdelen van het systeem.
Alle bestanden die louter door mij zijn geschreven zijn in de bovenste projectmap. LUFA onder de LUFA-map is opgeslagen, en "Lib" slaat diverse componenten niet geschreven door mij (daar kunnen er wijzigingen).
Ervaren C programmeurs kunnen vinden dat ik brak enkele regels. Voor de. C-bestanden die opgenomen in plaats van gecompileerd zijn, mijn excuus is dat ze apart modulariseren zonder te ontwerpen van API's die abstract. Voor de andere fouten is mijn excuus de beperkte hoeveelheid tijd ik moest bouwen, programma, test en documenteren van dit project.
Er is sommige mechanismen die worden gebruikt in de code waarmee dezelfde code worden opgesteld voor ATmega644 en ATmega644P-chips, evenals de Teensy ++, de pin-toewijzingen zijn verschillende (en dus het circuit vereist minder bedrading). De geporteerde code is niet getest. Er is uiteraard geen USB-functionaliteit in de ATmega644/ATmega644P-versie omdat dat microcontroller geen USB heeft.
De zekeringen voor het AT90USB1286 mag niet worden gewijzigd als u de Teensy gebruikt ++.
De zekeringen voor het ATmega644 moeten zijn: LFUSE: 0xE2, HFUSE: 0x9F, het belang van deze instellingen is dat de interne RC-oscillator wordt gebruikt op 8 MHz (overwegende dat de Teensy ++ maakt gebruik van een externe 16 MHz kristal die wordt gedeeld door 2 intern).
Voor een nette manier om het berekenen van de AVR zekeringen, probeer dit: http://www.frank-zhao.com/fusecalc/
Bijgevoegd zijn tijdstempel volledige broncode.