PB1 ist kein Ausgang?
Hallo,
hab da mal wieder ein Problemchen, wollte gerade einen Eingang abfragen
und dann ne LED zum leuchten bringen.
Dabei werden PB0 welcher als Ausgang gesetzt ist und PC0 welcher als
Eingang deklariert gebrückt. Also bekomm ich direkt 5V von PB0 auf PC0.
Dies soll dann eine LED welche an PB1 angeschlossen ist zum leuchten
bringen.
Hier mal der Code:
Kann mir jemand helfen?Code:#include <avr/io.h> int main (void) { DDRB |= (1<<PB0); PORTB |= (1<<PB0); //Pin B0 auf Ausgang und High setzen while (1) { if ( PINC & (1<<PINC0) ) { //Abfrage ob an Pin C0 5V anliegen PORTB |= (1<<PB1); // Pin PB1 auf High } else { PORTB &= ~(1<<PB1); //Pin PB1 auf Low } } }
PB1 ist kein Ausgang?
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Danke für die schnelle Antwort habs auch grad noch gesehen, jetzt leuchtet er dauerhaft
egal ob die Brücke gesteckt ist oder nicht.
#include <avr/io.h>
Code:int main (void) { DDRB |= (1<<PB0); DDRB |= (1<<PB1); while (1) { PORTB |= (1<<PB0); //Pin B0 auf Ausgang und High setzen if ( PINC & (1<<PINC0) ) { //Abfrage ob an Pin C0 5V anliegen PORTB |= (1<<PB1); // Pin PB1 auf High } else { PORTB &= ~(1<<PB1); //Pin PB1 auf Low } } }
Das wäre ja auch zu einfach gewesen ;)
Zwei direkt verbundene Pins finde ich kritisch, vorsichtshalber würde ich einen kleinen Widerstand als "Brücke" verwenden. Wenn es nicht schon zu spät ist....
Bei den AVRs haben viele Pins mehrfache Funktionen. Bei Port C fällt mir sofort JTag ein. Schau mal im Datenblatt deines AVR ob es für PC0 zutrifft. (Beim Mega32 z. B. ist PC0 der SCL-Pin vom I2C, also unkritisch, solange deine Schaltung keinen I2C-PullUp hat).
Ansonsten: Anderen Eingangspin versuchen, Brücke nach GND anstelle von PB0, Pegel mit Messgerät messen.
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
probiers mal so:
PB0 bleibt dabei auf 0 (GND), am Eingang PC0 wird diesmal der Pullup gesetzt.Code:#include <avr/io.h> int main (void) { DDRB = 0x03; PORTB = 0x00; DDRC = 0x00; PORTC = 0x01; while (1) { if ( PINC & (1<<PC0) ) { //Abfrage ob an Pin C0 5V anliegen PORTB |= (1<<PB1); // Pin PB1 auf High } else { PORTB &= ~(1<<PB1); //Pin PB1 auf Low } } }
Funktioniert also genau andersrum wie vorher, hat aber den Vorteil, dass 2 definierte Zustände am Eingang vorhanden sind. Einmal durch die Brücke auf Masse gezogen, ohne Brücke durch den Pullup am PC0 auf 5V hochgezogen.
Alternativ kannst auch nen 50kOhm Pulldown an PC0 hängen und deinen code nochmal probieren
Lesezeichen