Sida 1 av 1

Funktionsproblem i C AVR (löst)

Postat: 16 mars 2007, 15:59:08
av klintan
Har lite problem med funktionr i C när jag programmera min AVR atmega128.

Problemet är att så fort jag kallar på en funktion så fastnar programmet där och sedan resetas hela programmet(eller kretsen?) och programmet körs om.

Ett exempel:

Kod: Markera allt

#define F_CPU 1000000UL /* 1 MHz Internal Oscillator */
#include <avr/io.h>
#include <util/delay.h>
#define E PC2
#define RS PC0

void enable(){ // min funktion som ja vill kalla på

PORTC |= (1 << E); //sätt E hög och sänd datan
_delay_ms(5); 		// vänta och sen...
PORTC &= ~(1 << E); //sätt E låg och skicka nästa instruktion

}

int main()
{
... // initera LCD för hand med alla enable inlagda i main, alltså ej några yttre funktionsanrop

PORTA = 0x40;
PORTC |= (1 << E); //sätt E hög och sänd datan
_delay_ms(5000); 		// vänta och sen...
PORTC &= ~(1 << E); //sätt E låg och skicka nästa instruktion
PORTA = 0x40;
enable(); // hit kommer koden sen startar hela alltet om, så funktionen funkar iaf en gång som den skall, för att sedan gå om.
PORTA = 0x30; // detta kommer aldrig med
enable();

while(1){}
}

Antagligen ett lätt programmeringsfel, har gått igenom ett antal C tutorials på nätet och läst en massa om funktioner å funktionsanrop och return värden m.m.
Har också varit igenom ett antal LCD c program till avr där samtliga funktioner där ser ut som på mitt sätt. men nåt fel är de ju
Tacksam för alla förslag

Postat: 16 mars 2007, 16:02:46
av Micke_s
Har du kollat på fusebits så du inte kör den i mega103 läge?
den brukar krasha när man pillar i register och funktioner som finns i 128 men ej 103:an

Postat: 16 mars 2007, 16:47:21
av MicaelKarlsson
När du ändå är i fusebits och rotar så ta en titt på JTAG-en, den kan ställa till det en del.

Postat: 16 mars 2007, 17:32:36
av klintan
tack så mkt det var de som var problemet :)