atmega16 problem LÖST
> Jag vill ju inte göra något när det sker ett interrupt.
OK, jag förstår, detr är därför som ISR(ADC_vect), {, } är helt tomt ?
Du kanske (i alla fall för felsökningen) kan lägga *någonting* där.
Vissa kompilatorer optimerar bort helt tomma kodblock...
Och, som SvenW sa, kolla LST filen så att du säkert *vet* vad det är
för kod som du faktiskt kör...
OK, jag förstår, detr är därför som ISR(ADC_vect), {, } är helt tomt ?
Du kanske (i alla fall för felsökningen) kan lägga *någonting* där.
Vissa kompilatorer optimerar bort helt tomma kodblock...
Och, som SvenW sa, kolla LST filen så att du säkert *vet* vad det är
för kod som du faktiskt kör...
Nu har jag äntligen hittat felet även fast jag har lite funderingar kring det. Jag har iaf bytt ut en 10uF kondensator som sitter mellan vcc och gnd mot en 100uF. Vad är det då som hänt när jag hade den lilla kondensatorn i eftersom allt fungerade när jag inte hade avståndssensorn ikopplad så kan den la inte vara trasig? Kan då någon förklara vad det är som händer för jag antar att det blev kortslutning som då resetade processorn hela tiden. Är jag på rätt spår?
Då direkt över på nästa problem. Vill ha en enkel delay och tänkte använda den färdiga delay.h. Problemet är att oavsett vad jag skriver in i funktionen så blinkar dioderna med cirka 100ms intervall. vad kan jag gjort för fel då?
Då direkt över på nästa problem. Vill ha en enkel delay och tänkte använda den färdiga delay.h. Problemet är att oavsett vad jag skriver in i funktionen så blinkar dioderna med cirka 100ms intervall. vad kan jag gjort för fel då?
Kod: Markera allt
#include <util/delay.h>
while(1)
{
PORTD &= 0b10000111; //Tänder lysdioderna
_delay_ms(5000);
PORTD |= 0b01111000; //Släcker lysdioderna
_delay_ms(5000);
}
1. Man brukar köra med en lite mindre konding på ca 100nF mellan Vcc och Gnd så nära digitala kretsar som möjligt. Har du en sån?
2. Mycket möjligt att kretsen reset:ar pga dåligt matningsspänning. Det kan kan vara bra att t ex blinka någon LED under uppstarten så att man tydligt märker när AVR:en startar om.
3. Om du kollar i delay.h eller avr-libc-manualen (borde stå där) så ser du att delay_ms() har en övre gräns för hur långa delays den kan göra. Fråga mig inte varför...
2. Mycket möjligt att kretsen reset:ar pga dåligt matningsspänning. Det kan kan vara bra att t ex blinka någon LED under uppstarten så att man tydligt märker när AVR:en startar om.
3. Om du kollar i delay.h eller avr-libc-manualen (borde stå där) så ser du att delay_ms() har en övre gräns för hur långa delays den kan göra. Fråga mig inte varför...
> Vad är det då som hänt när jag hade den lilla kondensatorn i...
Jag vet inte om det har framgått vad du matar det hela ifrån, men
det låter som om du drar för mycket ström för att en 10 uF konding
ska orka hålla det hela uppe. Så, vad matas det hela från ?
> _delay_ms(5000);
http://www.nongnu.org/avr-libc/user-man ... delay.html
Jag vet inte om det har framgått vad du matar det hela ifrån, men
det låter som om du drar för mycket ström för att en 10 uF konding
ska orka hålla det hela uppe. Så, vad matas det hela från ?
> _delay_ms(5000);
http://www.nongnu.org/avr-libc/user-man ... delay.html
Har gjort lite rösök med den här delayen men inte lyckats så behöver nog lite mer hjälp.
"The maximal possible delay is 262.14 ms / F_CPU in MHz." Har tittat i databladet efter klockfrekvensen på min processor men det enda jag hittade var "Speed Grade 0 - 8 MHz for ATmega16L". Jag har en ATmega16L kan tilläggas. Hur vet jag vilken klockfrekvens processorn går på som då också F_CPU ska sättas till.
Hur gör jag för att få längre delayer än en sekund? borde detta t ex bli en sekunds delay?
Om jag kör denna kod så får jag en delay på 16 sekunder oavsett vad jag sätter F_CPU till.
"The maximal possible delay is 262.14 ms / F_CPU in MHz." Har tittat i databladet efter klockfrekvensen på min processor men det enda jag hittade var "Speed Grade 0 - 8 MHz for ATmega16L". Jag har en ATmega16L kan tilläggas. Hur vet jag vilken klockfrekvens processorn går på som då också F_CPU ska sättas till.
Hur gör jag för att få längre delayer än en sekund? borde detta t ex bli en sekunds delay?
Kod: Markera allt
while(1)
{
PORTD &= 0b10000111; //Tänder lysdioderna
for(int j=0;j<100;j++)
{
_delay_ms(10);
}
PORTD |= 0b01111000; //Släcker lysdioderna
for(int j=0;j<100;j++)
{
_delay_ms(10);
}
}
-
- EF Sponsor
- Inlägg: 2109
- Blev medlem: 27 augusti 2005, 20:57:58
- Ort: Borlänge