- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 9 von 9

Thema: adc touch panel

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    16.04.2011
    Beiträge
    15

    adc touch panel

    Anzeige

    Powerstation Test
    Hi,

    ich habe da mal eine Frage.

    wenn ich ein Touch Panel folgendermaßen Programmiere funktioniert dies
    Code:
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Start Adc
    
    Do
    Config Portc.0 = Output                                    
    Config Portc.2 = Output                                    
    Portc.0 = 1                                                 
    Portc.2 = 0                                                
    Ddrc.1 = 0                                                
    Ddrc.3 = 0                                                 
    Waitms 20
    Y = Getadc(1)
    Y = 1024 - Y
    Locate 1 , 1
    Lcd "y:" ; Y
    
    Config Portc.1 = Output                                   
    Config Portc.3 = Output                                    
    Portc.3 = 1                                              
    Portc.1 = 0                                              
    Ddrc.0 = 0                                                
    Ddrc.2 = 0                                                  
    Waitms 20
    X = Getadc(0)                                               
    X = 1024 - X
    Locate 1 , 9
    Lcd "x:" ; X
    Loop
    End
    Auf folgendem Weg funktioniert dies nicht. Wo liegt mein Fehler? Würde mich über Hilfe sehr freuen.
    Code:
    Admux = Bits(refs0)
    Adcsra = Bits(aden , Adsc , Adps2 , Adps1)
    
    Do 
    Adcsra.adsc = 1
      Config Porta.0 = Output                                  
      Config Porta.2 = Output                                  
      Porta.0 = 1                                              
      Porta.2 = 0                                            
      Admux.mux0 = 1
      Admux.mux1 = 1                                          
      y = Adc
      Waitms 10
    
      Locate 1 , 1
      Lcd "y:" ; Readadc
    
      Adcsra.adsc = 1
      Config Porta.1 = Output                                   
      Config Porta.3 = Output                                  
      Porta.3 = 1                                             
      Porta.1 = 0                                             
      Admux.mux0 = 0
      Admux.mux1 = 1
      x = Adc
      Waitms 10
    
      Locate 2 , 1
      Lcd "x:" ; Readadc
    
    Loop
    End
    Gruß, stafen8010
    Geändert von stefan8010 (22.10.2011 um 11:45 Uhr)

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo Stefan,
    hast du dir im Simulator mal angesehen, ob bei beiden Versionen die gleichen bits in den relevanten Registern gesetzt werden?

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    16.04.2011
    Beiträge
    15
    Hallo for_ro,

    wenn ich für die Messung des Werts y
    Ddrc.1 = 0
    Ddrc.3 = 0
    zwischen
    Porta.2 = 0
    Admux.mux0 = 1
    einfüge und dies entspechend für die Messung des Werts x ergänze sind die Register Identisch.
    Funktionieren tut dies aber auch nicht.

    Es funktioniert nur, wenn ich nur den x- Wert oder nur den y- Wert auslese und den jeweiligen anderen Bereich auskommentiere. Messung der x uns y- Werte in einem Programm zusammen funktioniert nicht.

    Gruß, stefan8010

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo Stefan,
    ich meinte eigentlich, ob die ADC Register ADMUX und ADCSRAgleich gesetzt sind.
    Die Touchpanel werden ja so ausgelesen, dass du 2 Anschlüsse auf Ausgang legst und dann den Wert an den anderen beiden misst. Dann umgekehrt. Dies machst du in der zweiten Variante aber nicht.
    Warum mischt du eigentlich die Config Portx und die DDRx Befehle?
    Also so (ohne die ADC Sachen überprüft zu haben)
    Code:
    Adcsra.adsc = 1
      ddra.0 = 1
      ddra.2 = 1
      ddra.1 = 0
      ddra.3 = 0
      Porta.0 = 1                                              
      Porta.2 = 0                                            
      Admux.mux0 = 1
      Admux.mux1 = 1                                          
      y = Adc
      Waitms 10
    
      Locate 1 , 1
      Lcd "y:" ; Readadc
    
      Adcsra.adsc = 1
      ddra.1 = 1
      ddra.3 = 1
      ddra.0 = 0
      ddra.2 = 0
      Porta.3 = 1                                             
      Porta.1 = 0                                             
      Admux.mux0 = 0
      Admux.mux1 = 1
      x = Adc
      Waitms 10
    
      Locate 2 , 1
      Lcd "x:" ; Readadc

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    16.04.2011
    Beiträge
    15
    Hallo for_ro,

    Warum mischt du eigentlich die Config Portx und die DDRx Befehle?
    Das ist eine gute Frage. Anbei noch mal die beiden Programme. Ich habe beide jetzt auf nur DDRx Befehle geändert.
    Daneben habe ich mal die entsprechenden Werte des Simulators für ADMUX, ADCSRA, PortA und DDRA geschrieben. Ich kann keinen Unterschied finden.

    Programm welches funktioniert
    Code:
    $regfile = "M32def.dat"
    $crystal = 7372800
    $baud = 9600
    $hwstack = 100
    $swstack = 100
    $framesize = 100
    
    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
    Config Lcd = 16 * 2
    Cursor Off
    Cls
    
    Config Adc = Single , Prescaler = Auto , Reference = Avcc  ADMUX 40 / ADCSRA 86
    
    Dim X As Word
    Dim Y As Word
    
    Start Adc                                                                     ADCSRA 86
    
    Do
     Ddra.0 = 1                                                                   DDRA 01 bzw. 0B
     Ddra.2 = 1                                                                   DDRA 05 bzw. 0F
     Ddra.1 = 0                                                                   DDRA 05 bzw. 0D
     Ddra.3 = 0                                                                   DDRA 05 bzw. 05
     Porta.0 = 1                                                                  PORTA 01 bzw. 09
     Porta.2 = 0                                                                  PORTA 01 bzw. 09
     Waitms 10
     Y = Getadc(3)                                                              ADMUX 43 / ADCSRA 86
     Y = 1024 - Y
     Locate 1 , 1
     Lcd "y:" ; Y
    
     Ddra.1 = 1                                                                   DDRA 07
     Ddra.3 = 1                                                                   DDRA 0F
     Ddra.0 = 0                                                                   DDRA 0E
     Ddra.2 = 0                                                                   DDRA 0A
     Porta.3 = 1                                                                  PORTA 09
     Porta.1 = 0                                                                  PORTA 09
     Waitms 10
     X = Getadc(2)                                                              ADMUX 42 / ADCSRA 86
     X = 1024 - X
     Locate 1 , 9
     Lcd "x:" ; X
    Loop
    End
    Programm welches nicht funktioniert
    Code:
    $regfile = "M32def.dat"
    $crystal = 7372800
    $baud = 9600
    $hwstack = 100
    $swstack = 100
    $framesize = 100
    
    $sim
    
    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
    Config Lcd = 16 * 2
    Cursor Off
    Cls
    
    Dim Y As Word
    Dim X As Word
    
    Admux = Bits(refs0)                                                          ADMUX 40
    Adcsra = Bits(aden , Adsc , Adps2 , Adps1)                           ADCSRA 86
    
    Do
      Adcsra.adsc = 1                                                             ADCSRA 86
      ddra.0 = 1                                                                     DDRA 01 bzw. 0B
      ddra.2 = 1                                                                     DDRA 05 bzw. 0F
      ddra.1 = 0                                                                     DDRA 05 bzw. 0D
      ddra.3 = 0                                                                     DDRA 05 bzw. 05
      Porta.0 = 1                                                                    PORTA 01 bzw. 09
      Porta.2 = 0                                                                    PORTA 01 bzw. 09
      Admux.mux0 = 1                                                             ADMUX 41 bzw. 43
      Admux.mux1 = 1                                                             ADMUX 43
      y = Adc
      Waitms 10
      Locate 1 , 1
      Lcd "y:" ; y
    
      Adcsra.adsc = 1                                                             ADCSRA 86
      Ddra.1 = 1                                                                     DDRA 07
      Ddra.3 = 1                                                                     DDRA 0F
      Ddra.0 = 0                                                                     DDRA 0E
      Ddra.2 = 0                                                                     DDRA 0A
      Porta.3 = 1                                                                    PORTA 09
      Porta.1 = 0                                                                    PORTA 09
      Admux.mux0 = 0                                                             ADMUX 42
      Admux.mux1 = 1                                                             ADMUX 42
      X = Adc
      Waitms 10
      Locate 2 , 1
      Lcd "x:" ; X
    Loop
    End
    Gruß, stefan8010

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo Stefan,
    ich habe den ADC noch nicht auf die Register Art benutzt - warum willst du das eigentlich machen - aber die Reihenfolge deiner Befehle kommt mir doch etwas seltsam vor:
    Code:
      Adcsra.adsc = 1                                           '       ADCSRA 86
      Ddra.0 = 1                                                '          DDRA 01 bzw. 0B
      Ddra.2 = 1                                                '          DDRA 05 bzw. 0F
      Ddra.1 = 0                                                '          DDRA 05 bzw. 0D
      Ddra.3 = 0                                                '           DDRA 05 bzw. 05
      Porta.0 = 1                                               '           PORTA 01 bzw. 09
      Porta.2 = 0                                               '          PORTA 01 bzw. 09
      Admux.mux0 = 1                                            '       ADMUX 41 bzw. 43
      Admux.mux1 = 1                                            '       ADMUX 43
      Y = Adc
    Ich hätte es eher so gemacht:
    Code:
      Ddra.0 = 1                                                '          DDRA 01 bzw. 0B
      Ddra.2 = 1                                                '          DDRA 05 bzw. 0F
      Ddra.1 = 0                                                '          DDRA 05 bzw. 0D
      Ddra.3 = 0                                                '           DDRA 05 bzw. 05
      Porta.0 = 1                                               '           PORTA 01 bzw. 09
      Porta.2 = 0                                               '          PORTA 01 bzw. 09
      Admux.mux0 = 1                                            '       ADMUX 41 bzw. 43
      Admux.mux1 = 1                                            '       ADMUX 43
      Adcsra.adsc = 1                                           '       ADCSRA 86
      While Adcsra.adsc = 1                                     'Warteschleife bis Konvertierung fertig ist
      Wend
      Y = Adc
    Ich weiß auch nicht, ob Bascom die Zeile
    Y = ADC
    richtig umsetzt. Laut Datenblatt:

    When ADCL is read, the ADC Data Register is not updated until ADCH is read. Consequently, if
    the result is left adjusted and no more than 8-bit precision is required, it is sufficient to read
    ADCH. Otherwise, ADCL must be read first, then ADCH.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    16.04.2011
    Beiträge
    15
    Hallo for_ro,

    vielen Dank für deine Hilfe!

    So scheint es zu funktionieren, nur erhalte ich irgendwie Werte zwischen ca. 1700 - 9000
    Auch wenn ich anstelle ADC folgenden Code verwende:
    Code:
    W1 = Adcl
    W2 = Adch * 256
    Y = W1 + W2
    warum willst du das eigentlich machen
    Ich möchte nach auslesen der x,y Werte, mit anschließender zuweisung des jeweiligen betätigten Bereichs/ "Taste", den zugewiesenen Bereichswert über TWI weiterverwenden.

    Gruß, stefan8010

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Und das geht mit
    Zitat Zitat von stefan8010 Beitrag anzeigen
    Ich möchte nach auslesen der x,y Werte, mit anschließender zuweisung des jeweiligen betätigten Bereichs/ "Taste", den zugewiesenen Bereichswert über TWI weiterverwenden.
    Und das geht mit den Bascom Befehlen nicht?

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    16.04.2011
    Beiträge
    15
    Hallo for_ro,

    Und das geht mit den Bascom Befehlen nicht?
    Genau.

    Gruß, stefan8010

Ähnliche Themen

  1. Solar Panel am RP6
    Von _|Alex|_ im Forum Robby RP6
    Antworten: 127
    Letzter Beitrag: 24.02.2011, 14:44
  2. Suche Touch-Panel
    Von Crazy Harry im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 4
    Letzter Beitrag: 30.12.2010, 13:01
  3. LCD panel - coming soon?
    Von mfs im Forum Asuro
    Antworten: 30
    Letzter Beitrag: 13.05.2007, 00:51
  4. Touch Panel für 240x128 EA Display
    Von bertl100 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 02.07.2006, 19:40
  5. Touch Panel
    Von Xenon im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 18.08.2005, 14:47

Berechtigungen

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

Solar Speicher und Akkus Tests