-         

Ergebnis 1 bis 8 von 8

Thema: Schaltermatrix

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    05.03.2005
    Beiträge
    36

    Schaltermatrix

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    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?!?

    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;
    }
    Ich hatte noch Code drin, um mir adcval auf UART ausgeben zu lassen. Der kürze wegen hier rausgeschmissen!

    Einem angeschlossenen Sharp-IR-Sensor konnte ich damit Werte entlocken, mit der Schaltung kam nur 0......

    Wo ist mein Denkfehler?

    thx

    Banzai
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken schaltung01.jpg  

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    10.02.2005
    Ort
    eastside, L.E.
    Alter
    46
    Beiträge
    104
    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

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    05.03.2005
    Beiträge
    36
    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

  4. #4
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    66
    Beiträge
    10.970
    Hallo Banzai!

    Ich habe eine Skizze für Dich.

    MfG
    Code:
                1k
                ___
       +5V o---|___|-+-------+-------+------> zum ADC
                     |       |       |
                    .-.     .-.     .-.
                    | |1k   | |470  | |220
                    | |     | |     | |
                    '-'     '-'     '-'
                     |       |       |
                  \  o    \  o    \  o
                   \       \       \
                 T1 \.   T2 \.   T3 \.
                     o       o       o
                     |       |       |
        0V o---------+-------+-------+
                     |
                    ===
                    GND

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    05.03.2005
    Beiträge
    36

    Skizze

    thx4answer

    Die Skizze hat mir weitergeholfen, obwohl ich den 0V-Strang irgendwie...vermisse (siehe Attachement).

    Damit liefert die Matrix folgende Werte (mit obigen Code ):
    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
    Damit kann ja mal was anfangen.

    Thx4Help

    Banzai[/list]
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken schaltung02.jpg  

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.03.2005
    Beiträge
    386
    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.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken schaltung02_107.jpg  
    Gruss Robert

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    05.03.2005
    Beiträge
    36
    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

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.03.2005
    Beiträge
    386
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •