Hallo
iIch will über den PC5 einen Schalter abfragen woraufhin PortD Pin 2 auf high schaltet und mein schrittmotor dreht.Hier einmal der Code mit dem ich es probiert habe , es aber Schalter funktionirt nicht .Hoffe ihr könnt mir weiterhelfen.
iIch will über den PC5 einen Schalter abfragen woraufhin PortD Pin 2 auf high schaltet und mein schrittmotor dreht.Hier einmal der Code mit dem ich es probiert habe , es aber Schalter funktionirt nicht .Hoffe ihr könnt mir weiterhelfen.
HTML:
#include <avr\io.h>
#include <inttypes.h>
#include <avr\interrupt.h>
#include <util/delay.h>
volatile int y=0; //Schrittanzahl
void InitPorts()
{
DDRD =0b00000100 ; // PD2 Takt Signal
}
/* Funktion zum Entprellen eines Tasters */
inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)
{
if ( ! (*port & (1 << pin)) )
{
_delay_ms(50);
_delay_ms(50);
if ( *port & (1 << pin) )
{
_delay_ms(50);
_delay_ms(50);
return 1;
}
}
return 0;
}
void InitTimer2(void) //timer initialisierung
{
TIFR2 =0b00000010; // Interrupt Request loeschen (sicherheitshalber)
TIMSK2 =0b00000010; // Enable Output Compare A Interrupt
TCCR2A =0b01000010;
TCCR2B =0b00000101; // Prescaler 1024, CTC Mode 4, Timer1 Start
OCR2A =900; // Frequenz=10 hz
TCNT2 =0;
}
ISR (TIMER2_COMPA_vect)
{
y++;
if (y<220000)
{
PORTD^= (1<<PD2);
}
if (y==220000)
{
TCCR2A =0b00000000;
TCCR2B =0b00000000;
y = 0;
}
}
int main()
{
sei();
InitPorts();
InitTimer2();
DDRC &= ~( 1 << PC5 ); /* PIN PC5 auf Eingang (Taster) */
PORTC |= ( 1 << PC5 ); /* Pullup-Widerstand aktivieren */
if (debounce(&PINC,PC5)) /* Falls Taster an PIN PC5 gedrueckt.. */
PORTD ^= ( 1<<PD2 ); /* . Port PD2 Takt */
else
PORTD &=~ (1<< PD2);
do{}
while(1);
}