Sieh Dir Deine Schaltung noch mal genau an, Du schaltest entweder den Ground direkt oder über einen Widerstand auf den Port. Ein Spannungsteiler ergibt sich aber nie bei Deiner Schaltung, da Dein R1 direkt abgeerdet ist.
greetz Rajko
Hallo Leutz,
der "Naiv unwissende" stellt mal wieder eine Frage.
Die Schaltung im Attachment soll eine Schaltermatrix darstellen. Wenn ich an dem unteren Anschluss in einen A/D-Port des µC gehe, sollte sich doch dort unterschiedliche Spannungen messen lassen, oder?
Jedenfalls misst das Multimeter bei unterschiedlichen Tasterbetätigungen, unterschiedliche Volt. Bei Normalstellung eingehende 5V.
Allerdings reagiert der Port nicht darauf?!?
Ich hatte noch Code drin, um mir adcval auf UART ausgeben zu lassen. Der kürze wegen hier rausgeschmissen!Code:#include <stdlib.h> #include <stdio.h> #include <avr/io.h> #include <avr/interrupt.h> #include <avr/pgmspace.h> uint16_t ReadChannel(uint8_t mux) { uint8_t i; uint16_t result; ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS0); // Frequenzvorteiler // setzen auf 32 (1) und ADC aktivieren (1) ADMUX = mux; // Kanal waehlen ADMUX |= (1<<REFS1) | (1<<REFS0); // interne Referenzspannung nutzen /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */ ADCSRA |= (1<<ADSC); // eine ADC-Wandlung while ( ADCSRA & (1<<ADSC) ) { ; // auf Abschluss der Konvertierung warten } result = ADCW; // ADCW muss einmal gelesen werden, // sonst wird Ergebnis der nächsten Wandlung // nicht übernommen. /* Eigentliche Messung - Mittelwert aus 8 aufeinanderfolgenden Wandlungen */ result = 0; for( i=0; i<4; i++ ) { ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion" while ( ADCSRA & (1<<ADSC) ) { ; // auf Abschluss der Konvertierung warten } result = ADCW; // Wandlungsergebnisse aufaddieren } ADCSRA &= ~(1<<ADEN); // ADC deaktivieren (2) result /= 4; // Summe durch 8 teilen = arithm. Mittelwert return result; } int main( void ) { DDRA = 0x00; // alle auf Eingang PORTA = 0x80; // interner PullUp?!? uint16_t adcval; while(1) { adcval = ReadChannel(0); /* MUX-Bits auf 0b0000 -> Channel 0 */ } return 0; }
Einem angeschlossenen Sharp-IR-Sensor konnte ich damit Werte entlocken, mit der Schaltung kam nur 0......
Wo ist mein Denkfehler?
thx
Banzai
Sieh Dir Deine Schaltung noch mal genau an, Du schaltest entweder den Ground direkt oder über einen Widerstand auf den Port. Ein Spannungsteiler ergibt sich aber nie bei Deiner Schaltung, da Dein R1 direkt abgeerdet ist.
greetz Rajko
thx Bax,
da ich aber von Elektronik so viel Ahnung habe, wie ein Hund vom Eierlegen, würde ich einen Änderungsvorschlag sehr begrüssen.
Ob das jetzt ein Spannungsteiler ist, kann ich somit (bis jetzt) garnicht beurteilen....
Der R1 (so hat's mir irgendjemand mal irgendwann irgendwo erklärt), soll als Pull-Up(?) dienen. Sinn des ganzen war's ja, bei unterschiedlichen Schalterbetätigungen, verschiedene Spannungen am A/D zu kriegen.
Warum zeigt das Multimeter unterschiedliche Spannungen, wenn ich +5 und Port anklemme?
Hat jemand eine Schaltung dafür parat? Wäre toll.....
Banz
Hallo Banzai!
Ich habe eine Skizze für Dich.
MfGCode:1k ___ +5V o---|___|-+-------+-------+------> zum ADC | | | .-. .-. .-. | |1k | |470 | |220 | | | | | | '-' '-' '-' | | | \ o \ o \ o \ \ \ T1 \. T2 \. T3 \. o o o | | | 0V o---------+-------+-------+ | === GND
thx4answer
Die Skizze hat mir weitergeholfen, obwohl ich den 0V-Strang irgendwie...vermisse (siehe Attachement).
Damit liefert die Matrix folgende Werte (mit obigen Code ):
Damit kann ja mal was anfangen.Code:T1 T2 T3 Wert 0 0 0 255 1 0 0 82 0 1 0 128 0 0 1 175 1 1 0 62 0 1 1 104 1 0 1 71 1 1 1 56
Thx4Help
Banzai[/list]
So wie in deinem Bild "Schaltung02" funktioniert es wiederum nicht. Du hast so immer GND am Ausgang.
Du must den GND separat schalten wenn 0V haben willst. Ich habe Dein Schaltbild mal ergänzt.
Gruss Robert
thx steep,
ja ne is klar...
Ich hab anscheinend mit Absicht bei keinem gedrückten Schalter die Referenz-Spannung am Port anliegen (deswegen 255 bei keinem Schalter).
Was ist denn sinniger? Wenn ich es mir recht überlege, eigentlich 0 wenn kein Schalter gedrückt und bei allen drei die Referenzspannung, oder?
Mein Beispiel funktioniert zwar, aber der Vorschlag von PICture scheint ja eher dem 0-Standard zu entsprechen (obwohl ich bei steep den 4.Schalter nicht verstehe, weil ich den a. nicht habe und b. eigentlich garnicht will... ).
Für weitere Anregungen wäre ich dankbar...
Banz
Bei Deinem Schaltbid hast Du ja immer GND am Ausgang, egal welche Taste Du drückst.
Wenn am Ausgang nicht immer 0V(GND) sein soll, dann die GND Leitung zum Ausgang wegmachen (siehe die korrekte Schaltung von PICture).
Solltest Du aber auch 0V(GND) am Ausgang benötigen, dann musst Du einen zusätzlichen Schalter wie ich ihn Dir eingezeichnet hab verwenden.
Gruss Robert
Lesezeichen