PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schalterprogrammierung funzt ned



FartingWeasel
09.02.2006, 17:48
Hallo bin grad dabei mein AVR board mit WINAVR zu proggen und hätt eben probiert mit hilfe eines tasters eine led ein und auszuschalten, hab dazu des programm vom tutorial benutzt aber es geht ned... also der Ausgang wo die led sitzt wird ned auf high gezogen
hier mal mein Programm
#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 */

/* 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(100);
if ( ! (*port & (1 << pin)) )
{
/* Anwender Zeit zum Loslassen des Tasters geben */
_delay_ms(100);
return 1;
}
}
return 0;
}

int main(void)
{
DDRD=0x0ff;
PORTD=0x00;
DDRB &= ~( 1 << PB0 ); /* PIN PB0 auf Eingang (Taster) */
PORTB |= ( 1 << PB0 ); /* Pullup-Widerstand aktivieren */

if (debounce(&PINB, PB0)) /* Falls Taster an PIN PB0 gedrueckt.. */
PORTB = PINB ^ ( 1 << PB1 ); /* ..LED an Port PB1 an-
bzw. ausschalten */

}

Jetzt is natürlich die frage was ned geht?

SprinterSB
10.02.2006, 10:39
Ich seh da 2 mal "If (!...) ist das so beabsichtigt? Zudem wprd ich den Return-Wert am Angang merken in Abhängigkeit von PINx, und nicht erst am Ende besorgen.

Ringo
10.02.2006, 10:45
kenn mich mit WinAVR ned so aus..

Was mir auffällt ist " DDRD = 0x0FF" Muss das nicht DDRD = 0xFF heißen??

MfG
Ringo

FartingWeasel
10.02.2006, 19:42
also der code, der is so ausm tutorial hab ihn nur von D ports auf B ports umgeschrieben...
das mit der 0 darf eigentlich nichts machen is ja nur a vornuller
...

michaelb
10.02.2006, 20:41
Hi,
also ich würde das:

if (debounce(&PINB, PB0)) /* Falls Taster an PIN PB0 gedrueckt.. */
PORTB = PINB ^ ( 1 << PB1 ); /* ..LED an Port PB1 an-
bzw. ausschalten */

in ne Endlosschleife setzen, weil dein Programm aus ist bevor du überhaupt gedrückt hast!
Des zweimal if ist ja net schlimm!
Des 0xFF kann man so lassen man kann auch 0x00FF schreiben des isch genauso wie wenn man 0010 statt 10 schreibt!
Gruß Michi