Mycket underligt problem med en ATMega128

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
strombom
Inlägg: 3305
Blev medlem: 27 maj 2003, 10:50:20
Ort: Västra Götaland
Kontakt:

Mycket underligt problem med en ATMega128

Inlägg av strombom »

Jag har gjort ett väldigt kort program:

Kod: Markera allt

#include <avr/io.h>
void pausenn(void);

int main(void)
{
//Kort rutin som vägrar avslutas...
	pausenn();		

//Endast för att generera fyrkantsvåg till oscilloskopet så jag kan se att något händer:
	DDRD |= (1<<4);	
	while(1) {	
		PORTD |= (1<<4);
		PORTD &= ~(1<<4);
	}
	
	return 0;
}

void pausenn(void) {
	char i;
	for(i=0;i<66;i++);
}	
Mitt problem är att om jag sätter ett större tal än 66 i den understa loopen så hänger sig programmet där och går inte vidare... om jag har 66 eller lägre så fortsätter programmet glatt.

Jag blir helt snurrig på detta. HJÄLP
Kaggen
Inlägg: 432
Blev medlem: 29 januari 2005, 03:06:02

Inlägg av Kaggen »

Du är säker på att problemet inträffar när i är större än 66 och inte 127? I annat fall skulle du kunna deklarera i som en "unsigned char" istället eftersom 128 i en "char" är detsamma som -127 iomed att den är signed.

Men du kanske redan vet detta och redan testat det.

Du har inte något interrupt igång? Jag vet inte riktigt hur det är på AVR men du borde väl ha någon global interrupt-flagga. Prova disablea den i koden, utifall...

Annars är ju det hela mysko.
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

Du gör endast paus innan du gå rin i loopen, borde du inte ha pausen i loopen? jag tror att du inte hinner se att den togglar bara.
Eller hur har du tänkt? jag kanske har missat hur du använder det...

EDIT: Nej det bör inte bero på det, du kollar ju på det i ociloscopet, då kan inte jag se något fel :(
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Har processorn watchdog ?
Och i så fall, är den på ?
JJ
Inlägg: 366
Blev medlem: 16 maj 2005, 21:33:02

Inlägg av JJ »

Hur ser den disassemblerade koden ut? Hur funkar det i studion?
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Inte för att det borde har någon betydelse i det här fallet men prova att lägga in nyckelordet "volatile" innan "char i;". Asm-koden för båda fallen (under 66 och över 66) skulle, som JJ skrev, vara kul att se på.
Användarvisningsbild
simon78
Inlägg: 1091
Blev medlem: 8 juni 2004, 11:05:51
Ort: Vinninga/Lidköping
Kontakt:

Inlägg av simon78 »

precis som cytze sa; prova med volatile. Det är risk att kompilatorn optimerar bort "tomma uttrycket" och inte kör for-satsen alls annars.
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Inlägg av MicaelKarlsson »

Varför inte bara starta PWM-en?
Användarvisningsbild
exile
EF Sponsor
Inlägg: 496
Blev medlem: 21 oktober 2005, 23:32:07

Inlägg av exile »

Jag har kört din kode och den fungerar med värden störe än 66...

Villken verson av gcc har du?
AndXy
Inlägg: 12
Blev medlem: 30 september 2005, 08:40:49

Inlägg av AndXy »

Har du testat att deklarera variabeln i som en "integer" istället för "character" ?
Användarvisningsbild
strombom
Inlägg: 3305
Blev medlem: 27 maj 2003, 10:50:20
Ort: Västra Götaland
Kontakt:

Inlägg av strombom »

Oj oj, jag såg inte att det kommit svar :)

Jag har aldrig använt atmega128 innan. Den har en kompabilitets-"fuse" för någon krets som heter 103. När jag stängde av den så fungerade allt perfekt...

Jag gick till och med så långt att jag lödde bort kretsen och testade med en ny. Den överlevde dock värmepistolen, ingen skada skedd. Slösade bara bort 4 timmar på felsökning. :roll:

/Johan

Edit: Avrlib är ju underbart, det tog mig 10 minuter att få en grafisk LCD att rita en cirkel. Efter 30 minuter till hade jag en animation med bilder ritade i paint. Om någon ska till Custom Motor Show på Elmia kan ni se den där. ;)
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

Vad skall displayen användas till? och var hittar man dig på elmia om man åker dit?
Användarvisningsbild
strombom
Inlägg: 3305
Blev medlem: 27 maj 2003, 10:50:20
Ort: Västra Götaland
Kontakt:

Inlägg av strombom »

Den sitter på en ratt som jag nämnt i en annan tråd ( http://www.elektronikforumet.com/forum/ ... 73&start=0 ).

Ratten skall i sin tur sitta i en formula-bil som jag är med och bygger:
http://www.me.chalmers.se/formula/2006/html/index.php

Mig träffar du om du går dit på måndag (sista dagen), var vår monter är har jag inte ens kollat upp, jag avsade mig allt ansvar för planeringen (hade tillräckligt mycket att göra) :)

Vår bil är dock inte klar så vi har med en bil från tidigare år, vi visar bara smådelar från vår kommande bil.
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Inlägg av MicaelKarlsson »

strombom skrev: Jag har aldrig använt atmega128 innan. Den har en kompabilitets-"fuse" för någon krets som heter 103. När jag stängde av den så fungerade allt perfekt...
Det felet har man ju inte gjort... :lie: :lie:


Glöm inte att kolla upp ITAG-en om du skall fippla med port F!!
Skriv svar