So ich hab jetzt hier mal einen Ansatz den ich auf meinem ATMega 32 mit 14745600Mhz programmiert habe:
Code:
volatile unsigned char tim0=0;
volatile unsigned char c=0;
volatile unsigned char data=0b10100001;
ISR(TIMER0_OVF_vect){
TCNT0=249;//alle 3,75µs
//bei TCNT0 =0 tim0 wird in fosc/8 schritten hochgezählt! 0,54µs
//Clockleitung Toggeln
PORTB^=(1<<SCK);
//Sorgt dafür, das immer erst nach einmal High low an der CLOCKleitung üder die Datenleitung das nächste Bit rausgegeben wird
if(tim0==0){
tim0++;
//Data wird ausgegeben
if(data&(1<<c)) {PORTB|=(1<<MOSI); }else {PORTB&=~(1<<MOSI);}
if (c<7) {
//damit beim nächsten aufrufen das nächste Bit rausgegeben wird
c++;
} else {
//wenn das Byte raus is wird das nächste gesendet, wenn das auch gesendet wurde wird der interrupt abgeschalten und ein Beendet signal ans LCD ausgegeben(eine 1)
c=0;
if (data==0b10100001) {data=0b01011110;} else {TIMSK&=~(1<<TOIE0);c=0;LCD_ausgabe_int(0,3,1);}
}
}else{
tim0=0;
}
}
Der Timer ist mit einem Prescaler von 8 eingestellt und wird einfach nach einer kurzen Anfangssequenz(LED blicken) angemacht.
Dann sollte er ja eigentlich die Daten senden?!
Es funktioniert auf jedenfall so noch nicht...
Lesezeichen