Sorry lag vorhin als ich das gepostet hab mit dem Tablet im Grünen,hatte da den Code nicht zur Hand.
Hier mal der Code:
Gruß AndiCode://*****Grundeinstellungen //defines: #define F_CPU 16000000 //includes: #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include "lcd-routines.h" #include <stdlib.h> char Buffer[20]; int counter = 0; unsigned short countert0 = 0; long rpm = 0; //3***Interrupt Service Routine - Interrupt Eingang INT0**************************************** ISR (INT0_vect) { counter++; } ISR (TIMER0_COMP_vect) { countert0++; if (countert0 == 100) { cli(); countert0 = 0; rpm = (counter * 60) / 50; counter = 0; lcd_clear(); lcd_setcursor( 0, 1 ); itoa( rpm, Buffer, 10 ); lcd_string( Buffer ); sei(); } } //main programm: int main (void) { //1***pwm init********************************************************************************** TCCR1B |= (1<<CS12); //Prescaler 256 TCCR1A |= (1<<WGM10); //Fast PWM Mode TCCR1B |= (1<<WGM12); TCCR1A |= (1<<COM1A1) | (1<<COM1B1) ; OCR1A = 0; //PWM Start-Wert DDRD |= (1<< PD5); //PWM aktivieren //2***Switch init******************************************************************************* DDRA = 0b00000000; //Setze Port A auf Eingang PORTA = 0b00000000; //Deaktiviere alle internen Pull-Ups an Port A //3***Interrupt INT0 init*********************************************************************** GICR |= (1<<INT0); //Aktivieren des INT0 Interrupt Eingangs MCUCR |= (1<<ISC01) | (1<<ISC00); //Löst aus bei Wechsel von "low" nach "high" //4***Interrupt TIMER0 init********************************************************************* TCNT0 = 0; //Anfangszählerstand = 0 TCCR0 = (1<<CS02) | (1<<CS00); //Prescaler von 1024 auswählen /* CPU-Takt = 16.000.000Hz Prescaler = 1024 Zeit bis overflow = CPU-Takt/Prescaler = 16.000.000HZ / 1024 = 15.625Hz */ OCR0 = 50; //Zähler zählt bis 156 /* Zeit bis overflow = 15625Hz Zählwert = 156 Zeit bis Interrupt = 15625Hz / 156 = 100,16Hz ~ 100Hz 1s / 100 = 0,01s = 10ms */ TIMSK |= (1<<OCIE0); //Interrupt aktivieren //5**LCD init*********************************************************************************** lcd_init(); //***main*************************************************************************************** //Test while(1) { sei(); if ( PINA & (1<<PINA0) ) { OCR1A = 75; } else {OCR1A = 17; // lcd_clear(); } } }







Zitieren
Lesezeichen