Hello, Sorry dass ich mit meinen vielen Fragen so nerve. Bei mir ist es immer so dass ich mich eine Zeitlang immer nur mit einem Gebiet befasse, dann wieder mit etwas anderen. Jetzt ist wieder die Elektronik/uCs dran... Aber wem die ganzen Fragen stören kann sie eh ignorieren ;) Was sind eigentlich die Standardwerte in DDRD, DDRB und DDRC? Sind standardmässig alle als Ausgang oder als Eingang konfiguriert? (ich persönlich tippe als Eingang). Bezüglich der Datenrichtungen: mit sbi(DDRx, Pin) setzt man den Pin als Ausgang, mit cbi(DDRx, Pin) als Eingang oder? Bezüglich der Daten: mit sbi(PORTx, Pin) setzt man den Pin auf Strom, d.h. ich erhalte draussen ein HIGH, mit cbi(PORTx, Pin) erhalte ich ein LOW oder? Bei Eingängen, vor allem bei Schaltern muss ich IMMER einen Pullup-Widerstand einbauen, damit falls kein Signal kommt, der Zustand nicht irgendwas ist sondern auf Masse geht. Hab ich das so richtig verstanden? Kann ich die Grösse so eines Pullups generell bei AVR's auf 1kOhm setzen? Beim LED im Tuturial ist der Ausgang komplett umgekehrt. D.h. cbi schaltet die LED ein, sbi aus, da der andere Pol der LED gegen VCC geschaltet ist. Hab ich das richtig verstanden? Aber wieso ist das so gemacht? Kann ich nicht einfach die LED umdrehen (ich gehe vom Tutorial aus), zwischen AVR und der LED einen Widerstand und die andere Seite der LED auf GND schalten? So würde nichts passieren, wenn ich cbi() auf den Pin mache, aber wenn ich sbi() mache, würde aus dem Pin HIGH kommen und der Strom würde fliessen. Ist da was falsch in meiner Überlegung? Ich will es ermöglichen, per Jumper einstellen zu können, ob ich Hardware oder Software Handshake verwenden will. In diesem Fall muss ich den Jumper genau so positionieren wie der Schalter im Tutorial (Kapitel2, I/O Grundlagen) oder? Den Pin dann mit cbi(PORTx, Pin) auf Eingang schalten und mit bit_is_set(PINx, Pin) lesen. Wenn das Bit gesetzt ist, ist auch der Jumper gesetzt, wenn es nicht gesetzt ist dann ist der Jumper nicht gesetzt. Stimmt das so? Nun möchte ich auch per Jumper die Baudrate einstellen können. Wenn ich das so mache wie oben, brauche ich dafür 5 I/O Ports, ich möchte aber nur einen dafür verbrauchen. (Es wäre aber möglich zwar andere I/O Ports zu verwenden, die man aber zusätzlich für anderes verwenden kann, aber ich weiss nicht ganz wie das möglich sein soll). Hat da wer nen Tipp wie das mit Jumpern funktioniert? (Ich hätte ganze 8 I/O Pins die nur als Ausgang dienen und zum Drucker gehen. Damit könnte ich doch am Anfang wenn die Leitungen noch nicht gebraucht werden die verschiedenen Pins nach der Jumperposition abfragen. Doch wenn die Pins jetzt mit dem Drucker verbunden sind, steht dann auf einmal die eine Leitung wo der Jumper gesetzt ist immer auf einem gewissen logischen Pegel?) Danke im Vorraus, Niki
soweit ich mich erinnere, werden alle ports beim reset auf 0x00 gesetzt... also alles was im portfile des avrs ist, sollte auf 0x00 stehen. Jonas
Hi, Wennst die LED´s umdrehst gibts ein kleines Problem, da der AVR nur 2-3mA(kann sein das werte nicht ganz stimmen) liefern kann und deine LED`s aber mehr brauchen. Doch der AVR kann 20mA nach GND fließen lassen, deshalb diese Beschaltung. lg, Stefan
[Pullups] Die externen Widerstände kannst Du Dir ersparen. Du kannst Pullups per Software setzen indem Du die entsprechenden PORTx-Bits mit '1' beschreibst. Gruß Axel
Hallo Niki, mit folgendem Befehl kannst Du bei einem Eingang die (im AVR) internen pullUps aktivieren ldi r16, 0xFF out PORTD, r16 ;internal pullUps dann brauchst Du aussen keine Wiederstände mehr (Ich glaube Andreas hat das im Tutorial absichtlich weggelassen, weil man das bei anderen µCs braucht) ansonsten reichen auch 10kOhm um die Ports auf high zu setzen (da fließt ja kaum Strom - es geht nur um die Spannung) Bei Ausgängen ist das mit den AVRs so, wie Stefan das schon schrieb: Man schließ Verbraucher dauerhaft an Plus und mit Minus am AVR an Man nennt diese Art der PinAnschlussTechnik "OpenCollectorPort" (vgl. "npn"-Transistor) jo Axel
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.