Gast
#3213642
Hallo Community,
wie ist es eurer Meinung nach am einfachsten einen Clock für den SMBUS
zu generieren hab schon über ein Timer Interrupt hinbekommen jedoch als
Dauerschleife. Gibt es eine Möglichkeit den Interrupt zu stoppen sodass
ich nur den Clock 9 mal erzeuge mit eine Frequenz von 100kHz.
hier ist die Funktion zum Timer Initialisieren:
#include "TimerInit.h"
void Timer0 (void)
{
TCCR0B |= (1<<CS00); /* Precaler auf 1 (µC-Frequenz) */
TIMSK0 |= (1<<TOIE0); /* Overflow Interrupt erlauben */
TCNT0 = 240; /* Timer mit 240 vorgeladen */
_asm_ volatile ("sei"); /* Interrupt global aktivieren */
}
hier die Interrupt Routine:
#include "TimerInit.h"
#include <avr/io.h>
ISR (TIMER0_OVF_vect)
{
TCNT0 = 240; /* Timer mit 240 vorgeladen */
PORTD ^= (1 << PD7);
}
und main:
#include <avr/io.h>
/*Ende Include*/
int main( void )
{
unsigned int i;
DDRD = ( 1 << PD7 ); /* PORTD PIN7 als Ausgang definiert (SMB Clock)
*/
Timer0();/* Funktion Timer aufrufen */
;
while( 1 ) { /* Endlosschleife */
}
return 0;
}
oder ist es doch besser mit der bib. delay.h zu arbeiten und einfach
entsprechend dem SMB-Protokoll die Ports zuschalten?
P.S der Controller ist ein Mega88 8Mhz interner Clock.