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){}
}
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