Misterbrot
16.08.2007, 12:03
Hallo, hab seit neusten das Rn-Control Board und hab auch schon ein paar sachen zum laufen bekommen.z.b das LCD. So nun zu meinem Problem.
Ich will über den Port A einen Schalter bzw. Taster abfragen woraufhin PortC Pin 3 auf high schaltet und mein relais für eine Sirene schaltet.
Hier einmal der Code mit dem ich es probiert habe , es aber nicht klappen will ;-) .Hoffe ihr könnt mir weiterhelfen.
#include <avr/io.h>
#include <inttypes.h>
#ifndef F_CPU
#define F_CPU 3686400UL /* Quarz mit 3.6864 Mhz */
#endif
#include <avr/delay.h> /* definiert _delay_ms() ab avr-libc Version 1.2.0 */
#include <util/delay.h> /* in der aktuellen Version in util/ */
/* Einfache Funktion zum Entprellen eines Tasters */
inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)
{
if ( ! (*port & (1 << pin)) )
{
/* Pin wurde auf Masse gezogen, 100ms warten */
_delay_ms(50); // max. 262.1 ms / F_CPU in MHz
_delay_ms(50);
if ( *port & (1 << pin) )
{
/* Anwender Zeit zum Loslassen des Tasters geben */
_delay_ms(50);
_delay_ms(50);
return 1;
}
}
return 0;
}
int main(void)
{
DDRA &= ~( 1 << PA1 ); /* PIN PA1 auf Eingang (Taster) */
PORTA |= ( 1 << PA1 ); /* Pullup-Widerstand aktivieren */
if (debounce(&PINA, PA1)) /* Falls Taster an PIN PA1 gedrueckt.. */
PORTC = PINC ^ ( 1 << PC3 ); /* . Port PC3 an-
bzw. ausschalten */
}
Ich will über den Port A einen Schalter bzw. Taster abfragen woraufhin PortC Pin 3 auf high schaltet und mein relais für eine Sirene schaltet.
Hier einmal der Code mit dem ich es probiert habe , es aber nicht klappen will ;-) .Hoffe ihr könnt mir weiterhelfen.
#include <avr/io.h>
#include <inttypes.h>
#ifndef F_CPU
#define F_CPU 3686400UL /* Quarz mit 3.6864 Mhz */
#endif
#include <avr/delay.h> /* definiert _delay_ms() ab avr-libc Version 1.2.0 */
#include <util/delay.h> /* in der aktuellen Version in util/ */
/* Einfache Funktion zum Entprellen eines Tasters */
inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)
{
if ( ! (*port & (1 << pin)) )
{
/* Pin wurde auf Masse gezogen, 100ms warten */
_delay_ms(50); // max. 262.1 ms / F_CPU in MHz
_delay_ms(50);
if ( *port & (1 << pin) )
{
/* Anwender Zeit zum Loslassen des Tasters geben */
_delay_ms(50);
_delay_ms(50);
return 1;
}
}
return 0;
}
int main(void)
{
DDRA &= ~( 1 << PA1 ); /* PIN PA1 auf Eingang (Taster) */
PORTA |= ( 1 << PA1 ); /* Pullup-Widerstand aktivieren */
if (debounce(&PINA, PA1)) /* Falls Taster an PIN PA1 gedrueckt.. */
PORTC = PINC ^ ( 1 << PC3 ); /* . Port PC3 an-
bzw. ausschalten */
}