AVR chronograaf van concept aan PCB (7 / 13 stap)

Stap 7: Bouw van de oplossing; het laden van het programma.


Zodra alle code is geschreven (eigenlijk zou je dit veel eerder tijdens de ontwikkeling van) je moet de oplossing bouwen.  Dit is wanneer de compiler alle programmacode in een HEX bestand vertaalt.  Het HEX bestand is wat eigenlijk wordt geladen op de chip en is dat het enige wat de chip kan begrijpen.  Als je ooit hebt gezien een HEX bestand, weet je dat het is volledig un-leesbaar door de mens, dus dank de compiler.  De eerste foto ziet u het menu-item te klikken: bouwen >> bouwen oplossing.

Op dit moment zie je een heleboel dingen gaan door in het uitvoervenster onderaan, en als er Compilerfouten ziet u hier ook.  Als u de code hebt ingevoerd, precies zoals ik heb in de laatste stap moeten u eventuele fouten niet.  Alleen in geval zal ik kopieer en plak de code in zijn geheel rechtstreeks uit mijn bestand aan het einde van deze stap.  Ik bedacht net dat ik ook bestanden kan uploaden zodat ik een zipbestand met alle bestanden van de ATMEL Studio opgenomen.

U moet op dit punt de draak verbinden met de USB-poort op uw computer.

In de 2e foto ziet op de rechterbovenhoek, u "ISP op AVR Dragon" hilighted.  Klik hier om het omhoog een venster voor het configureren van de instellingen van het hulpprogramma net als wanneer we het instellen van de fuse-bits brengen.  Maak die zeker AVR Dragon is geselecteerd, en de Internet-provider voor de interface, en check de ISP klok.  Hieronder dat programmeren instellingen moet reeds hebben "wissen hele chip" geselecteerd en 'behoud EEPROM' ongecontroleerde.  Macht van uw breadboard circuit, de kabel 6-pins lint van de draak, en we zijn goed om te gaan.

Nu om het programma naar de chip te laden.  Klikt u op Tools >> apparaat programmering >> productie-bestand en vervolgens bladeren naar het bestand en het programma.  Maar! Het is veel makkelijker om gewoon klik Debug >> starten zonder Debugging (3de pic.)  Dit automatisch het programma gecompileerd en geladen naar de chip zonder een ander woord, zolang er geen compile-rerrors.

Dat is het! Als die goed werkten, moet u een functionerende chronograaf op een breadboard!  U kunt spelen met het door het aanraken van 12VDC aan op de sensor-ingangen (de Transistorschakelingen; niet de invoer pinnen) met een jumper-draad.  Ook spelen met de DIP-schakelaars en test de knop 'weergave afstand'.  Als je eenmaal een aantal als uitgang, kunt u testen de DIP-schakelaars voor 'de selectie met eenheden van de uitgang' en controleer of de wiskunde.

Nu zou ook een goede tijd om ervoor te zorgen dat uw sensoren werken correct met het circuit.  Ik ben ervan uitgaande dat niemand waarschijnlijk de zelfde sensoren die ik heb gebruikt zal, dus test jouwe nu voordat we gaan nadenken over de ETS van een permanente Raad... beter wijzigingen nu terwijl het circuit is vrij van soldeer.

Vervolgens hebben we een blik bij het creëren van de lay-out schema en karton met ExpressPCB...

CODE BEGINT ONDER DEZE LIJN ***

/*
* Speed_measurement.c
*
* Gemaakt: 9/15/2012 8:50:23 PM
* Auteur: Thomas L
*/

#define F_CPU 14.7456E6

#include < avr/io.h >
#include < util/delay.h >
#include < avr/interrupt.h >

/************************************************************************/
/ * verklaar globale variabelen * /
/************************************************************************/
unsigned int resultaat = 0;
int interruptcount = 0;
lang int tijd = 0;
lange int resetcount = 0;

int main(void)
{

DDRD = 0X00;       PORTD ingang voor externe interrupts
DDRC = 0XDF;       portc uitgang voor 7 segment multiplexing en 1 ingang voor weergave van de afstand
DDRB = 0XFF;       portb uitgang fot 7 segmentgegevens in bcd
PORTD | = 0XFF;       inschakelen van portd pull up weerstanden
(int0 en int1 vereisen externe pull up weerstanden of 1 interrupt zal worden geactiveerd op reset)

EICRA | = (1 << ISC11) | (1 << ISC01);   externe interrupts configureren
EIMSK | = (1 << INT1) | (1 << INT0);   //
TCCR1B | = (1 << CS12);     ingesteld prescaling voor timer1 256

/************************************************************************/
/ * verklaar variabelen voor berekening en weergave * /
/************************************************************************/

unsigned int degenen = 0;
unsigned int tientallen = 0;
unsigned int honderden = 0;
unsigned int x = 0;
dubbele ticsfoot = 0;
dubbele fps = 0;
dubbele fph = 0;
dubbele mph = 0;
dubbele km/uur = 0;
dubbele mps = 0;
int afstand = 0;

Sei();        inschakelen van de wereldwijde interrupts

while(1)
{



/************************************************************************/
/ * krijg sensor afstand in de voeten van pind 0,1,4,5 * /
/************************************************************************/

int. distanceinput = (~ PIND & 0x33);
int. hibits = (distanceinput >> 2);      krijgen pind bits 0,1 en 4,5 samen te zijn
int. lobits = (distanceinput & 0x03);     de waarde van de afstand in BCD.  bits 2,3 zijn de
afstand = (hibits + lobits);       ext interrupt-pinnen is al in gebruik.

Als (afstand == 0) afstand = 16;



/************************************************************************/
/ * 'klaar' indicator LED * /
/************************************************************************/

Als (interruptcount == 0)
{
PORTC | = (1 << 3);
}
anders
{
PORTC & = (0 << 3);
}

/************************************************************************/
/ * berekeningen aan snelheid in 4 eenheden zoeken * /
/************************************************************************/

Als (interruptcount == 2) //only berekenen wanneer beide interrupts hebben plaatsgevonden
{
cli();               global interrupts uitschakelen

ticsfoot = (tijd / afstand);      afstand is afstand tussen sensoren in voeten - ticsfoot is teller tics/voet
fps = (57600 / ticsfoot);       57600 is teller tics/sec (clk/prescaler cpu)
fph = (fps * 60 * 60);
mph = (fph / 5280);
km/uur = (mph * 1.609344);
MPS = (fps * 0.3048);

EIMSK | = (1 << INT1) | (1 << INT0);      //
Sei();            opnieuw inschakelen interrupts van de externe en mondiale interrupts
}

/************************************************************************/
/ * Kies Uitvoeropties * /
/************************************************************************/

Als (! () PIND & (1 << PIND6)) & & (PIND & (1 << PIND7))) //choose voeten/sec
{
Round(fps);
resultaat = fps;
}
anders als (PIND & (1 << PIND6) & &! () PIND & (1 << PIND7))) //choose meter per seconde
{
Round(MPS);
resultaat = mps;
}
anders als (PIND & (1 << PIND6) & & (PIND & (1 << PIND7))) //choose km/hr
{
Round(kph);
resultaat = km/uur;
}
anders //default mijl/uur
{
Round(mph);
resultaat = mph;
}

Als (resultaat > = 999) resultaat = 999;







/************************************************************************/
/ * vertraging om te stoppen met meerdere "2de interrupt" triggers * /
/ * zonder te vertragen belangrijkste codeuitvoering * /
/************************************************************************/

resetcount ++;

Als ((resetcount > = 0x00FF) & & (interruptcount > = 2)) //resetcount bovengrens duurt, is afhankelijk
{//before reset. 0x00FF ca. 3 sec
interruptcount = 0;
resetcount = 0;
}








/************************************************************************/
/ * int resultaat weergeven op 3 cijfers 7 segment display * /
/ * vertraging geeft zeven Segmenttijd decoder te decoderen en weergeven van cijfers * /
/************************************************************************/

Als (! () PINC & (1 << PINC5))) //to afstand beeldscherminstelling tentoongesteld
{//only terwijl de knop is ingedrukt
resultaat = afstand;
}
anders

honderden = (resultaat / 100);      krijg 100 's plaats cijfers
x = (resultaat % 100);
PORTB = (0x00|hundreds);
PORTC | = (1 << 2);        cijfers schrijven
_delay_ms(1);
PORTC & = (0 << 2);

tientallen = (x / 10);        Krijg 10 plaats cijfers
x = x % 10;
PORTB = (0x00|tens);
PORTC | = (1 << 1);        cijfers schrijven
_delay_ms(1);
PORTC & = (0 << 1);

degenen = x;          Get 1's plaats cijfers
PORTB = (0x00|ones);
PORTC | = (1 << 0);        cijfers schrijven
_delay_ms(1);
PORTC & = (0 << 0);

}
}

/************************************************************************/
/ * sensor 1 interrupt * /
/************************************************************************/
ISR(INT0_vect)
{
Als (interruptcount == 0)
{
TCNT1 = 0X0000;          teller op 0 instellen
interruptcount ++;         Increment interrupt graaf
EIMSK & = (1 << INT1) | (0 << INT0);      uitschakelen van INT0

}
else if (interruptcount == 1)
{
tijd = TCNT1;          waarde van de teller van de opname
interruptcount ++;         Increment interrupt graaf

}
anders resetcount = 0;

}

/************************************************************************/
/ * sensor 2 interrupt * /
/************************************************************************/
ISR(INT1_vect)
{
Als (interruptcount == 0)
{
TCNT1 = 0X0000;         teller op 0 instellen
interruptcount ++;        Increment interrupt graaf
EIMSK & = (0 << INT1) | (1 << INT0);     INT1 uitschakelen

}
else if (interruptcount == 1)
{
tijd = TCNT1;         waarde van de teller van de opname
interruptcount ++;        Increment interrupt graaf

}
anders resetcount = 0;
}

Gerelateerde Artikelen

Maken van weefsel aan PCB "SnapBricks"

Maken van weefsel aan PCB "SnapBricks"

als ik blijf mijn verkenning met e-textiel- en weefsel gebaseerd ingangen, liep ik over een probleem wanneer het proberen om prototype sommige draagbare knoppen die ik had gemaakt. Ik moest een manier de geleidende stof verbinden met een prototyping-
Ontwerpen van een uitbreiding PCB (Intel® IoT)

Ontwerpen van een uitbreiding PCB (Intel® IoT)

Dit Instructable is geschreven als een uitgangspunt voor degenen die graag gebruik van de Intel® Edison aan haar volle potentieel, door het op te nemen in een volledig ontwikkelde ingesloten project. Om dit te doen, u zult waarschijnlijk moeten maken
Ontwerpen van een romantische PCB met behulp van een gratis PCB design tool - EasyEDA

Ontwerpen van een romantische PCB met behulp van een gratis PCB design tool - EasyEDA

Heb je ooit geprobeerd om het ontwerpen van een PCB voor uw minnaar, kinderen of vrienden op een speciale dag? Waarom niet?PCB ook zou een geweldig cadeau dat openbaart dat uw creativiteit zal ook uw PCB-vaardigheden. Hier wil ik delen een romantisch
Toevoegen van een aan-/ uitschakelaar aan een Mixer Xenyx 1202

Toevoegen van een aan-/ uitschakelaar aan een Mixer Xenyx 1202

Voor mijn stem over werk gebruik ik een Xenyx 1202 4-kanaals mixer gemaakt door Behringer die niet over een aan-/ uitschakelaar.Stap 1: Beoordelen waar we de schakelaarVoor het aandrijven van het, moet het stroomsnoer van de transformator worden inge
Kaketoe papegaai lederen masker Tutorial: Van Concept tot voltooiing

Kaketoe papegaai lederen masker Tutorial: Van Concept tot voltooiing

Hallo, mijn naam is Chelsea en dit is mijn tweede gepubliceerde Instructable.In dit Instructable, will ik be wandelen u door de stappen voor het maken van een premium kwaliteit leer mask; van het concept van het ontwerp en de initiële aankoop van het
Afgedrukt van de printplaat (PCB) sproeier Machine

Afgedrukt van de printplaat (PCB) sproeier Machine

Hoe zou u willen maken van één of meerdere Printed Circuit Boards in minder dan 2 minuten?Hey weer.  Hoop dat iedereen genoten van mijn laatste Instructable op hoe maak je een grijphaak launcher.  Vandaag ga ik een iets andere weg van de schepping.Di
Bewijs van Concept Valveless Air Canon

Bewijs van Concept Valveless Air Canon

voor de langste tijd heb ik geïntrigeerd met canons van alle soorten. Eigenlijk om het inkoken hou ik van luid explosieve anythings. Hoe harder hoe beter. Als het gaat boom en je het in je borst voelt verliefd ik. Vanwege deze fascinatie en de relati
DIY: Het maken van uw eigen PCB boor met behulp van goedkope materialen...

DIY: Het maken van uw eigen PCB boor met behulp van goedkope materialen...

Hallo iedereen... im een studentuit Bangalore.. .not iedereen verschilt. maar ik heb één of andere hoeveelheid rage in de elektronica... Dit is mijn eerste... kunnen instrueren te basic.. .maar ik vond mijn idee voor starters in de elektronica.. .bas
Brede fiets wiel hubs maken en het toevoegen van hen aan auto velgen. DEEL 2!

Brede fiets wiel hubs maken en het toevoegen van hen aan auto velgen. DEEL 2!

Dit is een follow-up van mijn oorspronkelijke "brede fiets wiel hubs maken en ze aan te koppelen aan auto velgen!" Instructable.Het origineel kan hier worden gevonden:Dit Instructable is meer uit de uitlokker van een idee, een manier om te bevor
Hoe te uploaden van muziek aan Google Play

Hoe te uploaden van muziek aan Google Play

Google kunt u tot 20.000 liedjes opslaan op uw eigen cloud kostenloos via Google Play. Google Play kunt u toegang tot uw favoriete muziek overal vanaf uw computer naar uw mobiele telefoon. In een paar eenvoudige stappen zal u zitten kundig voor uw mu
Maken van kwalitatief hoogwaardige PCB thuis zelf

Maken van kwalitatief hoogwaardige PCB thuis zelf

Hallo vrienden!In deze video tutorial ga ik om te leren hoe te maken van hoge kwaliteit pcb thuis.U kunt het zelf doen, laten we kijken naar de video.
Brede fiets wiel hubs maken en het toevoegen van hen aan auto velgen!

Brede fiets wiel hubs maken en het toevoegen van hen aan auto velgen!

Dit is een project dat ik deed in het begin van het jaar voor de ratrodbikes.com spier Bike Build-off. Het bleek zeer succesvol en wilde het delen met anderen... Onthoud dit is slechts een idee wordt verleend, hoe goed het blijkt uit de individuele b
De metro van Londen aan op uw computer

De metro van Londen aan op uw computer

In dit Instructable, ik zal u tonen hoe u een live kaart van de metro in Londen kunt bekijken op uw computer.Dit is ook een vervolg op de Live Air Traffic Instructable.Stap 1: De Website Kunt u deze website op twee manieren:1. Kopieer dit: http://tra
Met behulp van Drijfhout aan kruid omhoog uw kamer

Met behulp van Drijfhout aan kruid omhoog uw kamer

Met behulp van Drijfhout aan kruid omhoog uw kamerPlanning voor sommige huisdecoratie? Huis decoreren kan moeilijk maar het kan ook heel eenvoudig. Drijfhout kan de perfecte en het beste medium om die natuurlijke flare naar elk willekeurig deel van u