Datenrichtung von PD7 auf Ausgang setzen:
DDRD |= (1<<PD7);
Vorwiderstand für die LED nicht vergessen!
Gruß
mic
Hallo Leute,
ich wollte heute mal was ganz simples machen.
Ich schalte eine Led auf einen Board mit dem µC ATmega168 ein.
Dazu folgender Code:
[php:1:4ed1cc49a1]
#include <avr/io.h>
int main()
{
PORTD |= (1<<PD7);
while(1)
{
}
return 0;
}
[/php:1:4ed1cc49a1]
Resultat davon ist es leuchtet nichts.
Derselbe Code in Assembler funktioniert.
Deswegen frage ich euch nach einem Rat:
Was mache ich falsch?
Datenrichtung von PD7 auf Ausgang setzen:
DDRD |= (1<<PD7);
Vorwiderstand für die LED nicht vergessen!
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!
Verdammter Mist ...
Hätte ich auch selber drauf kommen können ...
Weil so unerfahren bin ich ja auch nicht, aber ich dachte ...
Danke!
EDIT:
Mal so ne andere Frage:
Wenn ich einen Schalter habe der direkt am µC angeschlossen ist und gegen Masse, wie kann ich überprüfen, ob der betätigt wird?
Ich lege eine Spannung an und überprüfe mit einem weiteren Eingang ob es einen Spannungsabfall gibt?
Oder liege ich damit total falsch?
1. internen Pullup aktivieren (entsprechendes PORTPinBit setzen)Zitat von H3llGhost
2. PORTPin als Eingang schalten (entsprechendes DDRX-Bit = 0 )
3. PINX lesen, Bit testen: http://www.mikrocontroller.net/artic...den_.C2.B5C.29 und
https://www.roboternetz.de/wissen/in...r-Abfrage_in_C
Eventuell muss entprellt werden!
Gruß
Fred
Only entropy comes easy. - Anton Checkhov
Hallo
Unbedingt zuerst den Pin auf Eingang schalten und erst dann den PullUp aktivieren. Sonst gibt es einen Kurzschluss wenn gleichzeitig der Taster geschlossen ist!1. internen Pullup aktivieren (entsprechendes PORTPinBit setzen)
2. PORTPin als Eingang schalten (entsprechendes DDRX-Bit = 0 )
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!
Danke für eure Hilfe!
Habe es nun so gelöst:
[php:1:2361967651]
#include <avr/io.h>
int main()
{
DDRD &= ~(1<<PD6);
PORTD |= (1<<PD6);
DDRD |= (1<<PD7);
while (1)
{
if ( !(PIND & (1<<PIND6)) )
PORTD |= (1<<PD7);
else
PORTD &= ~(1<<PD7);
}
return 0;
}
[/php:1:2361967651]
Also ich würde sagen so ist es richtig oder?
Es fehlt noch:
Ansonsten sieht es gut aus, bis auf einen Fehler:Code:DDRD |= (1<<PD7);
Code:if ( !(PIND & (1<<PIND6)) ) // Ändern zu: if ( !(PIND & (1<<PD6)) )
Lesezeichen