Stap 4: Het toevoegen van meer circuits
Een korte opmerking voordat we verder gaan: de pinnen die we zullen gebruiken hebben verschillende functies die ze kunnen uitvoeren voor ons. Op het schema zijn de letters en het nummer aan de buitenkant van de doos die vertegenwoordigt de chip de namen van de generieke pin. PB1, staat bijvoorbeeld voor poort B pin 1. De I/O pinnen zijn gegroepeerd in havens en kunnen gebruikt worden individueel of in groepjes van tot aan de grootte van de haven. Haven C is de excentrieke met slechts 7 pinnen, en poort B heeft een aantal van de pins wordt gebruikt als het programmeren van de pinnen. Vergeet niet dat wij echter alles behalve de resetpin kan hergebruiken dus enige PC6 van grenzen is. PB6 en PB7 worden ook gebruikt als de kristal oscillator pinnen, zodat die ook buiten de grenzen, maar alleen wanneer u wilt gebruiken een externe oscillator.
Laten we beginnen met de sensor-ingangen.
Kijkend naar de eerste foto, ziet u dat de Q1 en Q2 circuits identiek zijn. De sensoren geven een 12VDC signaal wanneer zij actief zijn. Dit is te veel te verzenden naar een invoer pin direct, zodat ik deze transistor-schakelopties gebruikt om te ontdekken wanneer de sensor actief is en trek de invoer pin op grond.
D4 en D5 zijn er gewoon om de sensoren makkelijker voering. Ik ben met behulp van een foto-sensor met een reflector te stuiteren van de lichtbundel terug, dus als ze staan opgesteld correct de LEDs uitschakelen en de invoer pinnen gaan hoog. De software die zullen we voor later zal kijken voor deze ingangen te laag om aan te geven van het doorgeven van het doelobject gaan. Weerstanden R2 en R3 zijn pull-up weerstanden op deze invoer pinnen om te voorkomen dat valse triggering van lawaai. De AVR heeft interne pull-up weerstanden die u voor elke input inschakelen kunt, maar ik vond dat ze niet snel genoeg aan macht omhoog konden, en een interrupt meteen elke keer werd geactiveerd. De externe pull-up weerstanden voorkomen dit. R14 en R15 werden toegevoegd laat in de ontwikkeling om te voorkomen dat de interrupts triggering door het aanraken van de draden in het circuit.
Neem een kijkje op de functies van de twee pinnen aangesloten op de transistors. U zult zien dat ze beiden PCINT(number) en INT(number.) hebben PCINT staat voor Pin wijzigen INTerrupt en, indien ingeschakeld, zal leiden tot een interrupt telkens wanneer de pin staat van 0 verandert >> 1 of 1 >> 0. Dat is goed voor sommige toepassingen, maar niet voor deze. De andere gemeenschappelijke functie, INT0/INT1, betekent externe Interrupt 0 en 1. Dit zijn slechts twee interrupts dit soort op de chip, en ze kunnen worden geconfigureerd aan trigger op de positieve gaan of de negatieve gaan rand van een puls... Dat is perfect voor onze behoeften! We willen starten zodra de pin van 5V gaat aan de grond Wij schelen niet wanneer de pin gaat hoog opnieuw (tenzij u wilt proberen te meten van de lengte van het object doorgeven, maar dat is een ander project!)
Ik weet dat ik beloofd meer over interrupts... Wees geduldig. Voor nu is het genoeg om te weten dat wanneer een interrupt wordt geactiveerd het programma stopt wat hij doet en de code die we voor dat interrupt schrijven uitgevoerd. Na het uitvoeren van deze code, teruggaat het programma tot wat het deed voor alsof niets ooit gebeurde. We zullen het configureren van de interrupts in software, dus meer over dat in de sectie van de software, met inbegrip van sommige valkuilen aan horloge uit voor!
Dat is het voor de sensor-ingangen! Dus, deze toevoegingen op het breadboard te krijgen en vervolgens zult gaan we over tot enkele meer I/O aansluitingen...
Nu, in de tweede foto is er onze eerste productie! R4 en D2 maken de 'ready' lampje dat aangeeft dat het programma is klaar om te nemen van de volgende meting. Dit was een late toevoeging nadat ik had wat problemen met de tweede sensor triggering meerdere keren tijdens een enkele meting. Nu elke sensor leiden tot kan pas wanneer de meting wordt genomen en dan niet weer tot sommige tijd verstrijkt. Nadat de tijd is verstreken, de klaar licht komt op en de volgende meting kan plaatsvinden. SW4 was ook een late toevoeging. Zodra de afstand tussen de sensoren is ingesteld (zie volgende sectie), wilde ik een manier om te controleren welke waarde de programma werd gebruikt voor die afstand in de wiskunde te kunnen. Indrukken van deze toets zorgt ervoor dat instelpunt moet worden weergegeven op de schermen van de uitvoer.
OK, SW3. Dit is een duik pakket van 8 switches, die mij tweedehands te halen sommige gegevens van de gebruiker in de chip tijdens runtime. 6 switches worden gebruikt en ze elk een invoer pin verbinden met de interne pull-up weerstand ingeschakeld (we zullen zien hoe om ze later in software.) De eerste 4 schakelaars vertegenwoordigen de afstand tussen de sensoren in de voeten. Het bereik is 1-16 voet in één voet stappen (0000 = 16.) Oorspronkelijk, het bereik was 1-15 en 0000 was 0, maar dat veroorzaakt een kloof-door-zero-voorwaarde. Om die reden alle 4 ingangen laag is gelijk aan 16. Merk op dat de 4 ingangen niet op opeenvolgende input pennen zijn. Dat vormt een beetje een probleem als ze verondersteld worden een 4-bits binair getal. Vanwege dit, zullen we moeten doen een beetje manipulatie in de software terug te krijgen de 4 bits samen voordat ze kunnen worden gebruikt als een binaire waarde. De laatste twee schakelaars van SW3 zijn twee meer ingangen kan de gebruiker kiezen hun favoriete productie-eenheden. In het schema kunt u de opmerking hierover. De mogelijke productie-eenheden zijn mijl/uur, kilometer/hr meter/sec en voeten/sec. Het is mogelijk om elke natuurlijk gewenste eenheden. Als je furlongen/twee weken, kan je dat net zo makkelijk door het veranderen van de rekenkunde in het programma! Meer goodies uitkijken naar!
PIC 3 toont de 4 bit BCD (Binary Coded Decimal; slechts een decimaal getal vertegenwoordigd door 4 bits. Opfrissen op uw BCD hier: http://en.wikipedia.org/wiki/Binary-coded_decimal) output naar de BCD 7-segment decoder, de 74LS48. PortB0 - 3 zijn mooi gegroepeerd samen waardoor het gemakkelijk is te sturen naar de decoder de BCD ingangen zonder opmaak. De decoders pinnen aangeduid * hoofdstad * A, B, C en D zijn de BCD-ingangen. Dus, zodra we ons nummer hebben, kunnen we gewoon stuur het binaire uit op portB en laat de decoder doen de rest. SW1 is optioneel, en gewoon vertelt de decoder aan het licht van alles op de displays voor testdoeleinden. VCC en grond moet zichzelf hier, en we krijgen om * kleine * a, b, c, d, e en f volgende... Een laatste ding over de decoder. De /LT pin gebruiken we voor de "lamp test" natuurlijk, maar wat zijn die andere twee rare pinnen? /BI- / RBO is niet-blanking- en niet-rimpel blanking uitvoer (de balk over de naam is een logische "niet" wat betekent dat actieve laag zoals de resetpin op de AVR.) Er zijn details over hoe deze pinnen in het gegevensblad werken, maar als er niets anders, de blanking input mag niet naar de grond of de displays leeg zullen zijn! Dus ik gewoon aangesloten aan de + 5v levering.
Pic 4 ziet er ingewikkelder dan het werkelijk is. Elke 7-segment display heeft elk van de anode (positieve) verbindingen met het label kleine letters a - f. De drie toont enkel daisy chain samen zodat alle de a's zijn samengebonden en alle de b's zijn samengebonden en zo verder... Ze sluit aan op de corresponderende pin op de decoder zodat alle gegevens van de decoder naar alledrie van de beeldschermen op hetzelfde moment gaat. Je zou kunnen afvragen hoe u wilt weergeven een getal van drie cijfers dat had verschillende cijfers! Dat is het doel van Q5, Q3 en Q4. Elk beeldscherm vereist ook een kathode (negatieve) verbinding met grond te kunnen oplichten. Dus, als we kunnen bepalen welke weergave is geaard en bepalen welke cijfers de decoder is afgeven, we kunnen doorlopen de drie cijfers en drie beeldschermen echt snel weergeven een ander cijfer op elkaar! Dit proces heet multiplexing. Het gebruik van de 7-segment decoder en multiplexing vermindert het aantal pinnen van de uitvoer moest slechts 7 van 21! PortC0 - 2 worden gebruikt om de transistor-switches die de displays van de grond te beheren. Dit deel is leuk in software! Ik kan niet wachten!
De laatste foto ziet u het voltooide circuit. Als u dat nog niet gedaan hebt, het zorgvuldig breadboard en maak je klaar om terug te gaan naar ATMEL Studio...