Avatar billede h-w.dk Nybegynder
27. april 2004 - 11:17 Der er 10 kommentarer

C og micro controler hjælp!

Jeg er igang med at programmere en micro controler. Jeg skal have lavet sådan at når der er gået f.eks. 6 timer fra der kom strøm på controleren, skal den gøre noget... Er der nogen der kan hjælpe??
Avatar billede chries Nybegynder
27. april 2004 - 11:19 #1
den har vel en timer =)
Avatar billede h-w.dk Nybegynder
27. april 2004 - 11:19 #2
info omkring micro controller:

hip type          : ATmega32
Program type        : Application
Clock frequency    : 4,000000 MHz
Memory model        : Small
Internal SRAM size  : 2048
External SRAM size  : 0
Data Stack size    : 512
Avatar billede h-w.dk Nybegynder
27. april 2004 - 11:20 #3
Er helt nu i det her...

Det er til et skole projekt!
Avatar billede h-w.dk Nybegynder
27. april 2004 - 11:27 #4
Hvordan fungerer timeren??
Avatar billede h-w.dk Nybegynder
27. april 2004 - 11:29 #5
Jeg skal programmere det i codevisionAVR
Avatar billede chries Nybegynder
27. april 2004 - 11:33 #6
http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf

Når din software starter, gemmer du en værdi der svarer til hvor mange gange din timer skal trigges før det svarer til 6 timer. Du sætter en timer op til at trigge engang imellem (nok med den laveste frekvens mulig). og i den timer tæller du en ned hver gang og tjecker du om der er nået 0.
Avatar billede h-w.dk Nybegynder
27. april 2004 - 11:35 #7
kan du simplificere det lidt... Er lidt forvirret...
Avatar billede chries Nybegynder
27. april 2004 - 12:20 #8
Lad os sige du sætter 16-bit-timer/counter1 (side 84 i manual) til at tælle op med , lad os sige 100 hz (tilfældig valgt værdi, hvad hardwaren kan sættes op til har jeg ikke tjecket) og at den trigger hver gang den er nået til EA60 (60000). dvs du får et timer tick ca. hver 600 sekunder. 6 timer ville så svare til 6*60*60 / 600 = 36 ticks.

Når din program starter (power on) sætter du en variablet til 36. Hver gang din timer trigger (hver 600 skunder), tæller du en ned. Når den så er nået 0, udfører du din opgave.
Avatar billede h-w.dk Nybegynder
27. april 2004 - 13:27 #9
ok, du kan ikke lave et eksempel?

Jeg er ikke helt med på det hele af det... de 100 hz du snakker om, jeg kan kun finde en 3,906 kHz og op til 4000,00 kHz... trigger?? hver gang den er nået til EA60??

Ellers kan jeg godt følge dig.
Avatar billede chries Nybegynder
27. april 2004 - 13:58 #10
Har aldrig koden til atmel endnu, og har ikke AVR installeret eller tid til at prøve på at programmere et helt program :)

ticks = timer interrupts

okey, hvis du ikke bruger en extern clock, kan du ikke "omnå" 100hz. Det du gør er at sættte prescaleren til 1024. Så kan du opnå ca. 3900 hz.

(jeg går ud fra counter registeret tæller opad)
du sætter compare registeret (TOP) for (16 bit) counter1 til 39000 og at den skal give interrupt. Derved får du et interrupt hver 10 sekunder (husk at kører i CTC mode, så den starter ved 0 når den når TOP). Der er eksempler på at accesse register i manualen.

det svarer så til at, når du har modtaget 6*60*60 / 10 = 360 interrupts, er der gået 6 timer.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester