PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Taster Abfrage und Relais ansteuern?



Misterbrot
16.08.2007, 11: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 */

}

radbruch
16.08.2007, 11:19
Datenrichtung für Port C steht noch auf Eingang?

Misterbrot
16.08.2007, 11:42
mh hab das jetzt mal geändert, geit aber immer noch nicht


int main(void)
{

DDRC = 0xff;
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 */

else
PORTC = PINC ^ ( 0 << PC3 );

}[/quote]

izaseba
16.08.2007, 11:52
Hallo,
versuch das mal so:


if (debounce(&PINA, PA1)) /* Falls Taster an PIN PA1 gedrueckt.. */
PORTC ^= ( 1 << PC3 ); /* . Port PC3 an-
bzw. ausschalten */

else
PORTC &=~ (1<< PC3 );

Wobei XOR keinen Sinn ergibt, weil solange Du PA1 drückst flattert PC3 wie bekloppt, mach dann besser PORTC |=(1<<PC3)

Gruß Sebastian

Misterbrot
16.08.2007, 15:55
super dankeschön!, habs jetzt hinbekommen :-)