AVR Chronograph från koncept till PCB (4 / 13 steg)
Steg 4: Lägga till mer kretsar
En kort anmärkning innan vi fortsätter: stiften kommer vi att använda har flera funktioner som de är kapabla att utföra för oss. På schematiskt är bokstäver och nummer på utsidan av rutan som representerar chipet generiska pin namnen. PB1, står till exempel för Port B stift 1. I/O pins är grupperade i portar och kan användas individuellt eller i grupper om upp till port storlek. Port C är udda med bara 7 stift, och port B har flera av dess stift som används som programmering stift. Kom ihåg att vi kan återanvända alla utom Återställ PIN-koden, så enda PC6 är tabu. Också, PB6 och PB7 används som kristall oscillator stiften, så de är tabu också, men bara när du behöver använda en extern oscillator.
Låt oss börja med sensoringångar.
Titta på första bilden, kan du se att kretsarna som Q1 och Q2 är identiska. Sensorerna ger en 12VDC signal när de är aktiva. Detta är för mycket att skicka till en ingångsstift direkt, så jag använde dessa transistor switchar för att upptäcka när sensorn är aktiv och dra in PIN-koden till marken.
D4 och D5 är bara det att rada upp enklare sensorer. Jag använder en fotosensor med en reflektor för att studsa balken tillbaka, så när de är uppradade korrekt lysdioderna inaktivera och input stiften går hög. Den programvara som vi kommer att komma till senare kommer att titta på för dessa insatsvaror att gå lågt att ange bortgången av objektet. Resistorer R2 och R3 är pull-up motstånd på dessa indata stiften för att förhindra falska utlöser från buller. AVR har inre pull-up motstånd som kan aktiveras för varje ingång, men fann jag att de kunde inte tillräckligt snabbt vid uppstart, och ett avbrott utlöstes direkt varje gång. De externa pull-up motstånd förhindra detta. R14 och R15 tillkom sent i utvecklingen att förhindra utlöser avbrotten vid rörande trådarna i kretsen.
Ta en titt på funktionerna hos de två stiften ansluten till transistorerna. Ser du att de båda har PCINT(number) och INT(number.) PCINT står för Pin Change INTerrupt och, om aktiverad, kommer att utlösa ett avbrott varje gång stiftet ändrar tillstånd från 0 >> 1 eller 1 >> 0. Det är bra för vissa tillämpningar, men inte för den här. Den andra gemensamma funktionen, INT0/INT1, betyder yttre mellanjobb 0 och 1. Dessa är endast två avbrotten av detta slag på chip, och de kan konfigureras att trigga på gående det positiva eller negationen kommer kanten av en puls... Det är perfekt för våra behov! Vi vill att utlösa så snart stiftet går från 5V till marken Vi bryr oss inte när stiftet går hög igen (om du vill försöka mäta längden på passerar objektet, men det är ett annat projekt!)
Jag vet att jag lovade mer om avbrott... ha tålamod. För nu räcker det att veta att när ett avbrott utlöses programmet slutar vad det gör och exekverar koden vi skriver för att avbryta. Efter att kod körs går programmet tillbaka till vad det gjorde innan som om ingenting hänt. Vi kommer att konfigurera avbrotten i programvara, så mer om detta i avsnittet programvara, inklusive några fallgropar att se upp för!
Det var allt för sensoringångar! Så, få dessa tillägg på en skärbräda och sedan får vi gå vidare till några fler I/O anslutningar...
I den andra pic nu, är det vår första produktion! R4 och D2 gör "klar" ljuset som anger att programmet är redo att ta nästa mätning. Detta var ett sent tillägg efter att jag hade vissa problem med de andra sensorn utlösa flera gånger under en enda mätning. Nu varje sensor kan utlösa endast när när mätningen tas och sedan inte igen förrän vissa tiden går. Efter tiden passerar, lampan redo tänds och nästa mätning kan ske. SW4 var också ett sent tillägg. När avståndet mellan sensorerna är inställd (se nästa avsnitt), jag ville ha ett sätt att kunna kontrollera vilket värde som programmet använde för den sträcka i matten. Tryck på denna knapp orsakar att börvärdet till ska visas i utdata visas.
OK, SW3. Detta är en DIP paket med 8 växlar jag brukade få vissa data från användaren till chip vid körning. 6 växlar används de var med och ansluta till en ingångsstift inre pull-up resistor aktiverat (vi kommer att se hur man aktiverar dem senare i programvara.) De första 4 växlarna representerar avståndet mellan sensorer i fötterna. Utbudet är 1-16 fötter en fot i taget (0000 = 16.) Ursprungligen, det var 1-15 och 0000 0, men som orsakade ett dividera med noll villkor. Därför är alla 4 ingångar låg lika med 16. Observera att de 4 ingångarna inte är på varandra följande input stift. Som innebär lite av ett problem när de är tänkt för att vara en 4-bitars binära tal. Därför måste vi göra lite manipulation i programvaran för att få de 4 bitarna ihop innan de kan användas som ett binärt värde. De sista två växlarna av SW3 är två fler ingångar till tillåta förbrukaren till välja deras föredragna utmatningsenheter. Du kan se anteckning om detta på schematiskt. Möjliga output enheter är miles/tim, kilometer i timmen, meter/sekund och fot per sekund. Det är möjligt att använda alla enheter du vill naturligtvis. Om du gillar furlongs/två veckor, kan du göra det lika enkelt genom att ändra aritmetiskn i programmet! Mer godsaker att se fram emot!
Bild 3 visar de 4 biten BCD (Binary Coded Decimal, bara ett decimalt tal representeras av 4 bitar. Friska upp din BCD här: http://en.wikipedia.org/wiki/Binary-coded_decimal) utdata till BCD till 7-segment-dekoder, 74LS48. PortB0 - 3 är fint grupperade tillsammans vilket gör det enkelt att skicka dem till de dekoder BCD ingångar utan någon formatering. Avkodare stiften märkta * capitol * A, B, C och D är BCD ingångarna. Så, när vi har vårt nummer, kan vi bara skicka i binära ute på portB och låta dekodern göra resten. SW1 är valfri och säger bara dekodern att lysa upp allt på displayerna för teständamål. VCC och marken bör vara självförklarande här, och vi kommer att få * små * a, b, c, d, e och f nästa... En sista sak om dekodern. /LT PIN-koden använder vi för "lampa test" uppenbarligen, men vilka är de andra två konstiga stift? /BI- / RBO är inte-blanking ingång och inte-rippel blanking utgång (baren över namnet är ett logiskt 'inte' betyder aktiv låg som Återställ PIN-koden på AVR.) Det finns detaljer om hur dessa stift arbetar i databladet, men om inte annat, blanking ingång får inte gå till marken eller displayerna blir tom! Så jag bara anslutit den till den + 5v leverans.
Bild 4 ser mer komplicerad än den faktiskt är. Varje 7-segment display har var och en av dess anod (positiv) anslutningar märkta gement a - f. De tre visas bara seriekoppling tillsammans så att alla de Anderssons binds tillsammans och alla Berglunds binds ihop och så vidare... Sedan alla ansluta till motsvarande stift på dekodern så att data från dekodern går till alla tre skärmar samtidigt. Du kanske undrar hur du vill visa ett tresiffrigt nummer som hade olika siffror! Det är syftet med Q5 Q3 och Q4. Varje skärm kräver också en katod (negativ) anslutning till marken för att kunna lysa upp. Så, om vi kan kontrollera vilka som visas är jordad och kontrollera vilken siffra dekodern sänder ut, kan vi gå igenom de tre siffrorna och tre skärmar riktigt snabbt visa en annan siffra på var och en! Denna process kallas multiplexing. Användning av 7-segment dekodern och multiplexing minskar antalet utgångsstift behövs från 21 till endast 7! PortC0 - 2 används till att kontrollera växlarna transistor som marken displayerna. Denna del är kul i programvaran! Jag kan inte vänta!
Den sista bilden visar den färdiga kretsen. Om du inte redan, breadboard det noga och gör dig redo att komma tillbaka till ATMEL Studio...