Hi,
oh man richtig.
Jetzt muss ich aber noch einen Programmfehler haben.
Jetzt macht der Motor gar nichts mehr. Ich bekomm ihn nicht mehr gestartet.
MfG Ralf
"Der Motor verändert seine Geschwindigkeit durch meine Körperbewegungen oder wenn ich den motor im Raum bewege."
Cool, Du kannst damit Signale von Ausserirdischen empfangen. Oder auch die Aura Deines Koerpers messen.. sehr esoterisch!
Ne, im Ernst: Da liegt ein undefiniertes Signal an und der Eingang reagiert auf minimalste Schwankungen von wasweissichwas.
Der Fehler liegt wohl am PINC, wie es schon Hubert geschreiben hat.
Und? Fehler schon gefunden? Ansonsten: Wie sieht das Programm nun aus? Verkabelung noch in Ordnung?
Ich weiß nicht wo der Motor drauf ist, aber PB5 ist immer low.
Hallo,
ich hab den Fehler gefunden. Und zwar bin ich es gewohnt (SPS), dass 12V am Eingang anliegen müssen, damit dieser high meldet. und somit habe ich den Port anschluss über den Taster mit 5V verbunden, damit ich bei geschlossenem Taster 5V am Port an liegen habe (wie bei ner SPS).
Ich hab jetzt durch messen herausgefunden, dass ich wenn ich den Eingang definier, 5V an Port anliegen habe. Jetzt habe ich den Taster zwischen Ground und Port gehängt und es geht wie gewünscht.
Kann mir einer sagen warum das beim Mikrokontroller so ist?
MfG und Danke
Hmm.. im IF, das
PORTD |= (1<< PD3); //auf high setzen
passiert auch nur einmal und wird nie rueckgesetzt.. hat damit vermutlich nichts zu tun, sieht aber auch sonderbar aus, sollte wohl ein PB3 sein, oder?
5V ist eigentlich ueblich hier, oder auch nur 3.3V.
siehe auch gaengige Logikpegel:
http://de.wikipedia.org/wiki/Logikpegel
Geändert von Calis007 (20.01.2012 um 10:18 Uhr)
Wenn du einen Port als Eingang definierst, ist dieser erst mal hochohmig. Dann kannst du den internen PullUp aktivieren.
Damit ist dieser Port bei der Abfrage if(Pin....) auf high. Ein Taster macht dann nur Sinn wenn er auf GND schaltet.
Wenn du es umgekehrt haben willst geht das natürlich auch. Es ist dann ein externer PullDown notwendig und die Taste nach +5V.
Der interne PullUp darf dann nicht aktiviert werden.
hab ich auch grad gelesen^^
jetzt funktionierts.
#include <avr/io.h>
int main (void)
{
while (1)
{
DDRC &= ~(1<< PC1); //PortC Pin2 als Eingang definieren
PORTC |= (1<< PC1); //PortC Pin2 Pullup aktivieren
if (!(PINC & (1<<PINC1))) //Läuft bei Taster geschlossen los
{
DDRB |= (1<< PB0); //als Ausgang definieren
PORTB |= (1<< PB0); //auf high setzen
DDRB |= (1<< PB5); //als Ausgang definieren
// PORTB |= (1<< PB5); //auf high setzen
PORTB &= ~(1<< PB5); //auf low setzen
DDRD |= (1<< PD3); //als Ausgang definieren (Motor enable)
PORTD |= (1<< PD3); //auf high setzen (Motor enable)
}
else
{
DDRB |= (1<< PB0) | (1<< PB5);
PORTB &= ~(1<< PB0) |(1<< PB5);
DDRD |= (1<< PD3);
PORTD &= (1<< PD3);
}
}
return 0;
}
Aber wo ich grad dran bin. Kann mir einer sagen wie das mit ner PWM aussehen muss?
Danke
mfg
Lesezeichen