AVR Chronograph från koncept till PCB (7 / 13 steg)

Steg 7: Bygga lösningen; Laddar programmet.



När all kod skrivs (faktiskt du skulle göra detta mycket tidigare under utveckling) du behöver för att bygga lösningen. Detta är när kompilatorn översätter all kod till en HEX-fil. HEX filen är vad faktiskt får lastades på chipet och är enda chip kan förstå. Om du någonsin sett en HEX-fil, du vet att det är helt un-kan läsas av människor, så tacka kompilatorn. Första bilden visar menyalternativet klicka: bygga >> Build Solution.

Här ser du en massa saker gå i utdatafönstret i botten, och om det finns någon Kompilatorfel ser du dem här också. Om du har angett koden exakt som jag har i det sista steget inte bör du ha några fel. Bara i fall jag kopiera och klistra in koden i sin helhet direkt från min fil i slutet av detta steg. Jag listat bara ut att jag kan ladda upp filer också, så jag inkluderat en ZIP-fil med alla filer som ATMEL Studio.

På denna punkt bör du ansluta draken till USB-porten på din dator.

I 2: a pic ser i det övre högra, du "ISP på AVR Dragon" hilighted. Klicka här för att få upp ett fönster konfigurera verktygsinställningar precis som när vi anger fuse bitar. Se till att AVR Dragon är markerat, och ISP för gränssnittet, och kontrollera Internet-leverantören klocka. Under dessa, programmering inställningar bör redan ha "radera hela chip" markerad och "bevara EEPROM" oskyddad. Driva din skärbräda krets, Anslut flatkabeln 6 pin från draken och vi är bra att gå.

Nu laddar programmet till chipet. Du kan klicka på Tools >> enhet Programmering >> produktion filen och bläddra till filen och programmet. Men! Det är mycket lättare att helt enkelt klicka på Debug >> Starta utan felsökning (3: e bild.) Detta kompilerar programmet automatiskt och laddar det till chip utan ett annat ord så länge det finns ingen sammanställa rerrors.

Thats det! Om det fungerade bör du ha en fungerande kronograf på en skärbräda! Du kan spela med det genom att röra vid 12VDC till sensoringångar (transistor kretsar, inte input stiften) med en jumper tråd. Även spela med DIP-switchar och testa knappen "Visa avstånd". När du får några nummer som en utgång, kan du testa "output enheter urval" DIP-switchar och kontrollera matten.

Nu skulle också vara en ganska bra tid att se till att din sensorer fungera korrekt med kretsen. Jag antar att kommer antagligen använda samma sensorer som jag har, så testa din nu innan vi börja tänka på etsning en permanent styrelse... bättre för att göra ändringar nu medan kretsen är gratis lödtenn.

Nästa, vi har en titt på att skapa schematiska och styrelsen layouten med ExpressPCB...

KODEN BÖRJAR UNDER DENNA LINJE ***

/*
* Speed_measurement.c
*
* Skapat: 9/15/2012 8:50:23 PM
* Författare: Thomas L
*/

#define F_CPU 14.7456E6

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

/************************************************************************/
/ * förklara globala variabler * /
/************************************************************************/
unsigned int resultatet = 0;
int interruptcount = 0;
långa int tid = 0;
långa int resetcount = 0;

int main(void)
{

DDRD = 0X00; portd ingång för extern avbryter
DDRC = 0XDF; portc utgång för 7 segment multiplexing och 1 ingång för avstånd visning
DDRB = 0XFF; portb utgång fot 7 segment data i bcd
PORTD | = 0XFF; Aktivera portd dra upp motstånd
(int0 och int1 kräver extern dra upp motstånd eller 1 avbrott kommer att utlösas vid reset)

EICRA | = (1 << ISC11) | (1 << ISC01); Konfigurera externa avbryter
EIMSK | = (1 << INT1) | (1 << INT0); //
TCCR1B | = (1 << CS12); Ange prescaling för timer1 256

/************************************************************************/
/ * deklarera variabler för beräkning och * /
/************************************************************************/

unsigned int de = 0;
unsigned int tior = 0;
unsigned int hundratals = 0;
unsigned int x = 0;
Double ticsfoot = 0;
dubbel fps = 0;
dubbel fph = 0;
dubbel mph = 0;
dubbel km/h = 0;
Dubbelrum m/s = 0;
int avstånd = 0;

SEI(); Aktivera global avbryter

While(1)
{

/************************************************************************/
/ * få sensorn avståndet i fötter från pind 0,1,4,5 * /
/************************************************************************/

int distanceinput = (~ PIND & 0x33);
int hibits = (distanceinput >> 2); att få pind bitar 0,1 och 4,5 tillsammans för att
int lobits = (distanceinput & 0x03); avståndet värdet i BCD. bitar 2,3 är den
avståndet = (hibits + lobits); ext-avbrott stift bruk redan i.

om (avstånd == 0) avstånd = 16.

/************************************************************************/
/ * "redo" indikator LED * /
/************************************************************************/

om (interruptcount == 0)
{
PORTC | = (1 << 3);
}
annat
{
PORTC & = (0 << 3);
}

/************************************************************************/
/ * beräkningar för att hitta hastigheten i 4 enheter * /
/************************************************************************/

om (interruptcount == 2) //only beräkna när båda avbrott har inträffat
{
CLI(); Inaktivera globala avbryter

ticsfoot = (tid / avstånd); avståndet är avståndet mellan sensorer i fot - ticsfoot är counter tics eller foten
FPS = (57600 / ticsfoot); 57600 är counter tics/SEK (cpu clk/prescaler)
FPH = (fps * 60 * 60);
mph = (fph / 5280);
km/h = (km/h * 1.609344);
m/s = (fps * 0.3048);

EIMSK | = (1 << INT1) | (1 << INT0); //
SEI(); Re-möjliggöra extern avbrott och globala avbryter
}

/************************************************************************/
/ * välja utmatningsalternativ * /
/************************************************************************/

om (! () PIND & (1 << PIND6)) & & (PIND & (1 << PIND7))) //choose fot per sekund
{
Round(fps);
resultat = fps;
}
annars om (PIND & (1 << PIND6) & &! () PIND & (1 << PIND7))) //choose meter/sekund
{
Round(MPS);
resultat = mps;
}
annars om (PIND & (1 << PIND6) & & (PIND & (1 << PIND7))) //choose kilometer i timmen
{
Round(KPH);
resultat = km/h;
}
annat //default miles/tim
{
Round(mph);
resultat = mph;
}

om (resultat > = 999) resultatet = 999;

/************************************************************************/
/ * dröjsmål att stoppa flera "2nd avbrott" utlöser * /
/ * utan att försena viktigaste kod * /
/************************************************************************/

ResetCount ++;

om ((resetcount > = 0x00FF) & & (interruptcount > = 2)) //resetcount övre gräns bestämmer dröjsmål
{//before reset. 0x00FF ca 3 SEK
interruptcount = 0;
ResetCount = 0;
}

/************************************************************************/
/ * Visa int resultatet på 3 siffrig sju segment display * /
/ * försening ger sju segment dekoder tid att avkoda och Visa siffror * /
/************************************************************************/

om (! () PINC & (1 << PINC5))) //to avstånd inställningen på displayen
{//only när knappen är nedtryckt
resultat = avstånd;
}
annat

hundra = (resultatet / 100); få 100-tals plats siffriga
x = (resultatet % 100).
PORTB = (0x00|hundreds);
PORTC | = (1 << 2); skriva siffror
_delay_ms(1);
PORTC & = (0 << 2);

TENS = (x / 10); få 10 's plats siffriga
x = x % 10.
PORTB = (0x00|tens);
PORTC | = (1 << 1); skriva siffror
_delay_ms(1);
PORTC & = (0 << 1);

de = x; få 1: s plats siffriga
PORTB = (0x00|ones);
PORTC | = (1 << 0); skriva siffror
_delay_ms(1);
PORTC & = (0 << 0);

}
}

/************************************************************************/
/ * sensor 1 avbrott * /
/************************************************************************/
ISR(INT0_vect)
{
om (interruptcount == 0)
{
TCNT1 = 0X0000; Återställ räknaren till 0
interruptcount ++; Increment avbrott räknas
EIMSK & = (1 << INT1) | (0 << INT0); Inaktivera INT0

}
annat if (interruptcount == 1)
{
tid = TCNT1; fånga räknarvärdet
interruptcount ++; Increment avbrott räknas

}
annat resetcount = 0;

}

/************************************************************************/
/ * sensor 2 avbrott * /
/************************************************************************/
ISR(INT1_vect)
{
om (interruptcount == 0)
{
TCNT1 = 0X0000; Återställ räknaren till 0
interruptcount ++; Increment avbrott räknas
EIMSK & = (0 << INT1) | (1 << INT0); Inaktivera INT1

}
annat if (interruptcount == 1)
{
tid = TCNT1; fånga räknarvärdet
interruptcount ++; Increment avbrott räknas

}
annat resetcount = 0;
}

Se Steg
Relaterade Ämnen

DIY ALLT I EN DATOR; Koncept till verklighet "komplett"

HejDess min första instructable. där jag ska försöka förklara visa dig hur du kan göra en billig alla i en PC.Men det är inte billigt men billigare än Orignal produkt veryyyyyyOKzzz min första bild är ett koncept bild förklara vad jag vill göra.Jag v...

Älskling, jag krympte Arduino: flytta från Arduino till ATtiny och skriva din kod i ren AVR-C

Arduino är en stor hård- och mjukvaruplattform, men med alla dess funktioner är det också lite uppsvälld och ofta behöver du bara en liten del av alla funktioner. Projektet kräver ibland för att ha mindre och billigare enheter. Vad du behöver är ATti...

Montering av Dragon Rider 500 för användning med AVR Dragon

inte länge sedan företaget Atmel kom ut med ett bra verktyg för användning med AVR microcontrollers kallas AVR Dragon. Denna lilla USB-enhet ger proffs och amatörer både förmågan att använda: I System programmering (ISP), JTAG, felsöka tråd och hög s...

Konvertera en NES gamepad till USB med Arduino

Hej!I detta instructable, jag visar dig hur du koppla in en Nintendo Entertainment System control pad till en arduino, arduino är i sin tur kör en särskild skiss som gör det möjligt att visa upp till en dator som en USB-HID-joystick!Och om detta inte...

PCB UV-exponering enhet

En UV exponering låda är ett mycket användbart att göra PCB.Jag har sökt och funnit att de är för stort och för dyrt för min använder. Dessutom kräver alla enheter en extern ström sorce.Därom bestämde jag mig att bygga en som passar bättre på mina be...

GameCube Controller till Wiimote

För det andra Instructable. Låt mig veta om något behöver fixas.Jag gjorde inte det krets eller program. Jag gör bara en guide som visar steg för steg montering av hur man gör en Gamecube till Wiimote controller.Den ursprungliga sidan finns här:http:...

Designa en Expansion PCB (Intel® IoT)

Detta Instructable har skrivits som utgångspunkt för dem som är angelägen om att använda Intel® Edison till dess fulla potential, genom att införliva det i en fullt utvecklad inbäddade projekt. För att göra detta, behöver du förmodligen att göra – so...

Snabb Digital termometer med billiga USB till TTL omvandlare och DS18B20 - utan Arduino eller Raspberry Pi

I min tidigare instructable jag gav en introduktion till Digital termometer med DS18B20 och ESP8266 nodemcu ombord med SPI OLED-skärm och programmering använder Arduino IDE. Det krävs kunskaper i programmering, grundläggande elektronik och krävs lite...

Universal programmerare för AVR: s och S51 plus ZIF socket!

Detta programmerare har utformats av företaget och har producerats minst 2500PCS av detta och det är ganska testad och standarder och nu vi inte tillverka denna version mer, här är en länk produkt (ledsen bara Farsi var tillgänglig)Universal AVR prog...

Billiga AVR/51 Development board

jag nyligen upptäckt STC microcontrollers tillverkas av TSMC. Att vara nyfiken på dessa microcontrollers började jag leta efter en utveckling styrelse för dem.Efter lite sökningar på google / ebay / AliExpress / jag beslutat att köpa denna PCB som ja...

Schweiziska AVR kniv

The Swiss AVR Knife buntar ett antal AVR programmering projekt tillsammans i en enda bekväm Altoids tuggummi tenn. På grund av den flexibilitet som erbjuds genom microcontroller programmering, ger det också en utgångspunkt för ett antal projekt baser...

LED Cube med Arduino och anpassade PCB

detta instructable Detaljer design och byggprocessen för en 5 x 5 x 5 LED cube, kontrolleras med en Arduino, som befinner sig på ett tryckt kretskort.Ytterligare information, foton och video finns på min hemsida.Den färdiga produkten visas i videon n...

PCB isolering spår fräsning med MyDIYCNC Desktop CNC maskin

Hej där,Tory @ MyDIYCNC här igen för att visa dig en annan cool projekt som är mycket lätt på din desktopen CNC-maskin. Vi ska vara fräsning ut isolering spår till Tom PCB material till manliga rapid prototyping mönsterkort. Med alla de rätta verktyg...

Lägga till knappar i musen

Jag har spelat FPS spel på min dator ett tag nu och jag fann mig ofta i behov av fler knappar på min mus. Det är därför jag köpte en gång en Logitech G9, utan i vissa spel även knapparna på det är extra 4 de tycktes vara några. Någon gång köpte senar...

En ram för att göra prisvärda & eleganta modulära styrsystem (USB till MIDI, gömde sig, eller seriella)

***JAG HAR SKAPAT EN NY INSTRUCTABLE FÖR DIY STYRENHETER:*************************************************************************************************************************************************************************************************...

Projektor lampa konvertering till LED

fick jag en projektor från en vän December 2010. Det är en kraftig D100U från 1997. Det hade inte den ursprungliga glödlampan, men allt annat fungerade bra. Jag gjorde lite efterforskningar på nätet för att se om jag kunde få en lampa för det och fic...

Hur man löda din fumeFan PCB KIT / några PCB KIT

Du är förmodligen en av de fantastiska människor som stöttat vår Kickstarter kampanj - fumeFan. Om du missade kampanjen kan du hitta mer om fumeFan på maketechnics.com.Detta instructable beskriver hur att löda den PCB KIT för varvtal styrkrets använd...

Tillägg lysdioder för sol dag lampa

Detta projekt föreslås för att öka nyttan av soldag lampa som publicerades tidigare i Instuctables:I det föreslagna projektet, är två ytterligare matriser av små lysdioder anslutna till solpanelen. Dessa tillägg LED matriser är utformade för att dra...

En enkel, låg spänning inverter för lysrör upp till 15 watt

tack till Burak Incepinar för att jag dokumentera hans design. Här är hans hemsida om du vill kolla in mer awesome mönster.Detta Instructable hjälper dig köra något fluorescerande ljus av låga spänningar, det har testats för att köra kompakt fluoresc...