mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmega128 AD-Wandlung


Autor: Daniel F. (mcnanuk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe ein Problem mit meiner AD-Wandlung. Ih vermute den Fehler am 
Board, und wenn ich da die Beschreibung schaue (D072 von Display 3000), 
dann sehe ich folgenden Text zum ARef:

>Lötbrücke ARef bridge (J8):
>Einige (acht) Eingänge des Controllers können analoge Werte auswerten. >Wer sehr 
exakteWerte braucht, der findet am ATMega128 einen spezielle >Port für eine 
Referenzspannung:
>ARef. Oft wird eine externer Zuführung von ARef nicht benötigt (dann ist >ARef 
mit der Versorgungsspannung von 5V verbunden) – dafür haben wir >Vorbereitungen 
getroffen:
>Der Eingang ARef (Auf der Platine mit AR gekennzeichnet, zwischen F0 und >E3) 
kann über die Lötbrücke (J8) mit Vcc (5V) verbunden werden. Diese >Lötbrücke ist 
standardmäßig NICHT geschlossen. Sollten Sie die ARef für >das Anlegen einer 
eigenen Referenzspannung benötigen, so muss die Brücke >offen >sein. Solange Sie 
diese Brücke geschlossen ist, steht zudem außen >an den Pads des ARef-Anschluss 
die normale 5-Volt-Versorgungsspannung >für andere >Nutzungen zur Verfügung – wenn 
die Leitung durchtrennt ist, >legen Sie an diesem Pad bitte Ihre eigene 
Refernzspannung an.
>Hinweis für Experten: Bitte nutzen Sie nicht die interne Referenzspannung >des 
Controllers, solange Sie ARef mit Vcc verbunden haben.
>Aref hat einen eigenen 100nF Kondensator, der bereits von uns eingelötet >wurde.
void init_adc(void)
{
 //ADC aktivieren, Prescaler 128 da 16 Mhz
 ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);   
}

uint16_t readADC(uint8_t mux)
{
  uint8_t i;
  uint16_t result;
 
  ADMUX = mux;                      // Kanal
  ADMUX |= (0<<REFS1) | (0<<REFS0); 
 
  /* 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.
 
  /* Messung, 100 mal und mitteln
     damit der Wert beim Auslesen stabiler 
   ist, weniger flackert.
  */
  result = 0; 
  for( i=0; i<100; i++ )
  {
    ADCSRA |= (1<<ADSC); 
    while ( ADCSRA & (1<<ADSC) ) {
      ; 
    }
    result += ADCW;  
  }
 
  result /= 100;                
 
  return result;
}


Ih schliesse nun meine Spannungsleitung an PF0 an. Und speichere das 
Wandlungsergebnis mit readADC(0).

Jedoch ist das Ergebnis immer 0. Ich habe auch schon 5V an den AR Port 
angelegt. Gebracht hat es nix.

Weiss jemand Rat ?

Autor: Oliver Ju. (skriptkiddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
result += ADCW;


ADCW--> heißt jetzt ADC und ist 16 bit groß. Result auch. Was meinst du 
passiert, wenn du 100 mal aufsummierst?

Autor: Daniel F. (mcnanuk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmmm also auf dem Atmega644 hat dieser Code funktioniert.
Selbst wenn ich ADCW in ADC umbenenne, und die Schleife nur einmal 
laufen lasse, kommt 0 bei rum.

Laut Handbuch sind die Beiden Pins ARef und GND nicht verbunden, und ich 
könnte eine Lötbrücke schliessen. Damit wäre ARef fest 5V, und ich 
könnte keine andere Spannung wählen.

Deshalb habe ich an diesen Pins, von extern VCC und GND angeschlossen. 
5V eben.

Trotzdem kommt nichts heraus. Oder liegt der Fehler wo ganz anders?

Autor: Stefan O. (avrstefan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab grade die Register nicht im Kopf. Hast du es schon mal mit der 
internen Referenzspannung probiert? Esterne AREF rentiert sich nur mit 
guten Spannungsreferenzen.

Was erwartest du dir mit der Mittelung über 100 Messwerte, ist dein 
Messsignal so mit Rauschen übersäht? Normalerweise sollten 4 - 16 Werte 
für eine Mittelung ausreichen, wenn das Signal nicht zu unruhig ist und 
man keine Mittelung über mehrere Perioden usw. benötigt. (Kommt aber 
natürlich immer auf den speziellen Anwendungsfall an.)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel F. schrieb:

> Laut Handbuch sind die Beiden Pins ARef und GND nicht verbunden, und ich
> könnte eine Lötbrücke schliessen.

Entgegen dem Rat im Handbuch möchtest du das nicht tun.
ARef ist mit einem Kondensator gegen Masse geschaltet (laut Handbuch) 
und genau das willst du haben.
Entgegen dem Rat im Handbuch wählst du AVcc als Referenzspannung lieber 
per Software aus als per Hardware.

> Deshalb habe ich an diesen Pins, von extern VCC und GND angeschlossen.
> 5V eben.

Das war schlecht.

Autor: Daniel F. (mcnanuk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die 100 waren keine Absicht, mehr ein verzweifelter Versuch.
Interne Referenzspannung habe ich auch schon versucht.

ADMUX |= (1<<REFS1) | (1<<REFS0);

Aber auch hier das gleiche Ergebnis. Ich denke ich muss wirklich diese
Lötbrücken schliessen. Jedenfalls verstehe ich den Text so. (über meinem
Code).

Karl heinz Buchegger, ich will so wenig wie nötig an dem Board rumlöten. 
Aber so wie es aussieht, muss ich es tun. Wenn ich nun die Lötbrücke 
schliesse, und die Lötbrücke für AGND, dann ist bei
ADMUX |= (0<<REFS1) | (0<<REFS0);

meine ARef == 5V ... oder ?
Kann ich sie dann überhaupt noch auf 2,56 V bringen? Ich denke nicht.

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ADMUX |= (0<<REFS1) | (0<<REFS0);

Was willst du damit erreichen?
Null oder irgendwas kommt immer irgendwas raus und nicht Null. Wenn du 
die Bits löschen willst, musst du verunden.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1/ Lass das Board so wie im Auslieferungszustand.
Also die ARef Lötbrücke offen und nicht mit externen 5V verbunden.

2/ Wie gibt du welche Messspannung auf Pin PF0? Schaltplan so?

Vcc o----+
         |
    10k  #
    Poti #<---------o PF0
         #
         |
GND o----+

3/ Wie sieht das vollständige Programm aus? Quellcode?
Aus deiner Beschreibung geht nicht hervor, ob und wo init_adc() 
aufgerufen wird. Ohne geht es aber nicht!

Autor: Daniel F. (mcnanuk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan B. schrieb:
> 1/ Lass das Board so wie im Auslieferungszustand.
> Also die ARef Lötbrücke offen und nicht mit externen 5V verbunden.

Okay

> 2/ Wie gibt du welche Messspannung auf Pin PF0? Schaltplan so?
>
> Vcc o----+
>          |
>     10k  #
>     Poti #<---------o PF0
>          #
>          |
> GND o----+

Nein nicht so, sondern:
 Vcc o----+ ---------o PF0

 GND o----+

Ich beziehe diese Entscheidung auf diesen Satz im Datenblatt:
The single-ended voltage inputs refer to 0V (GND).

> 3/ Wie sieht das vollständige Programm aus? Quellcode?
> Aus deiner Beschreibung geht nicht hervor, ob und wo init_adc()
> aufgerufen wird. Ohne geht es aber nicht!
#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include <string.h>
#include "glcd-Display3000-211.h"


#define KEY_DDR         DDRD
#define KEY_PORT        PORTD
#define KEY_PIN         PIND
#define KEY1            1
#define KEY4            4
#define KEY5            5
#define KEY6            6
#define KEY7            7
#define ALL_KEYS        (1<<KEY1  | 1<<KEY4| 1<<KEY5| 1<<KEY6| 1<<KEY7)
 
#define F_CPU 16000000UL

 
volatile uint8_t key_state;                                // debounced and inverted key state:
                                                  // bit = 1: key pressed
volatile uint8_t key_press;                                // key press detect
 
  

 
ISR( TIMER0_OVF_vect )                            // every 10ms
{
  static uint8_t ct0, ct1, rpt;
  uint8_t i;
 
  TCNT0 = (uint8_t)(int16_t)-(F_CPU / 1024 * 10e-3 + 0.5);  // preload for 10ms
 
  i = key_state ^ ~KEY_PIN;                       // key changed ?
  ct0 = ~( ct0 & i );                             // reset or count ct0
  ct1 = ct0 ^ (ct1 & i);                          // reset or count ct1
  i &= ct0 & ct1;                                 // count until roll over ?
  key_state ^= i;                                 // then toggle debounced state
  key_press |= key_state & i;                     // 0->1: key press detect 
}
 
///////////////////////////////////////////////////////////////////
//
// check if a key has been pressed. Each pressed key is reported
// only once
//
uint8_t get_key_press( uint8_t key_mask )
{
  cli();                                          // read and clear atomic !
  key_mask &= key_press;                          // read key(s)
  key_press ^= key_mask;                          // clear key(s)
  sei();
  return key_mask;
}
 
void init_PWM(void)
{
  //setting PWM-Ports as output
    DDRE |= (1 << PE3); 
  OCR3A = 0;

  TCNT3 = 0;
  TCCR3A |= 1<<COM3A1 | 1<<COM3A0 | 1<<WGM30;  //8 Bit fast PWM, 
  TCCR3B |= 1<<WGM32 | 1<<CS32;  //256 Prescaler
} 
 
/* Initialisiert den AD Wandler */
void init_adc(void)
{
 //ADC aktivieren, Prescaler 128
 ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);   
}

uint16_t readADC(uint8_t mux)
{
  uint8_t i;
  uint16_t result;
 
  ADMUX = mux;                      // Kanal
  ADMUX |= (0<<REFS1) | (0<<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 = ADC;  // ADC muss einmal gelesen werden,
                  // sonst wird Ergebnis der nächsten Wandlung
                  // nicht übernommen.
 
  /* Messung, 100 mal und mitteln
     damit der Wert beim Auslesen stabiler 
   ist, weniger flackert.
  */
  result = 0; 
  for( i=0; i<4; i++ )
  {
    ADCSRA |= (1<<ADSC); 
    while ( ADCSRA & (1<<ADSC) ) {
      ; 
    }
    result += ADC;  
  }
 
  result /= 4;                
 
  return result;
}

int main( void )
{
  unsigned char buffer[30];  
  uint8_t i;
  uint16_t adcval;
  init_PWM();
init_adc();

  DDRC = 0b11111111;

  PORTD &= ~(1<<PD5);    // PWM Pumpe aus. 

    KEY_DDR &= ~ALL_KEYS;               // konfigure key port for input
    KEY_PORT |= ALL_KEYS;             // and turn on pull up resistors
 
  TCCR0 = (1<<CS02)|(1<<CS00);    // divide by 1024
    TIMSK |= 1<<TOIE0;    // enable timer interrupt
   
  LCD_Init();  // caution: this also defines SPI for the display and also PortB (all ports but MISO are output) 
  
  delay_ms(1000);
       LCD_Cls(black);  
 
    sei();
  adcval = readADC(0);
  LCD_Cls(black);
  Orientation = Portrait180;
  LCD_Print(itoa(adcval,buffer,10), 1, 1, 2, 1, 1, green, black);
 
  while(1){

    OCR3A = 180;

  if( get_key_press( 1<<KEY1 ) ) {
  adcval = readADC(0);
        LCD_Cls(black);
    Orientation = Portrait180;
    LCD_Print(itoa(adcval,buffer,10), 1, 1, 2, 1, 1, green, black);
    }
  


  }
}

//  Enhanced delay-routine (wait) as as the standard delay routine (_delay_ms) is not able to delay
//  more than 17 ms maximum as of the used 8-bit-timer (depending on used crystal)
void delay_ms(uint16_t period)   //delay routine (milliseconds)
{
  for(unsigned int i=0; i<=period; i++)
    _delay_ms(1);
}





Autor: Daniel F. (mcnanuk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
init_adc();

Das hatte ich tatsächlich vergessen. Aber was jetzt angezeigt wird ist 
nicht besser. jetzt wird permanent 1023 angezeigt. Die ARef stimmt wohl 
noch nicht.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel F. schrieb:
> Stefan B. schrieb:
>> 1/ Lass das Board so wie im Auslieferungszustand.
>> Also die ARef Lötbrücke offen und nicht mit externen 5V verbunden.

Genau

>> Vcc o----+
>>          |
>>     10k  #
>>     Poti #<---------o PF0
>>          #
>>          |
>> GND o----+
>
> Nein nicht so, sondern:
>  Vcc o----+ ---------o PF0
>

OK.
Kann man machen.
Deine 100 * 1024 werden dann zwar überlaufen, aber das siehst du dann 
schon. 0 darf dann nicht mehr rauskommen (oder das wäre extremer Zufall)


> uint16_t readADC(uint8_t mux)
> {
>   uint8_t i;
>   uint16_t result;
>
>   ADMUX = mux;                      // Kanal
>   ADMUX |= (0<<REFS1) | (0<<REFS0); // interne Referenzspannung nutzen

Na ja.
Was erwartest du?

Extern hast du keine Referenzspannung angeschlossen (was ok ist)
und mit dieser Einstellung wählst du aus
  AREF, internal VRef turned off

Diese Einstellung sagt also: Benutze die Spannung, die ich an ARef 
angelegt habe.
Du hast aber keine angelegt (was gut ist)

Datenblatt lesen!
Um AVcc als Referenzspannung einzustellen musst du

   ADMUX |= (0<<REFS1) | (1<<REFS0);

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel F. schrieb:
> init_adc();
>
> Das hatte ich tatsächlich vergessen. Aber was jetzt angezeigt wird ist
> nicht besser. jetzt wird permanent 1023 angezeigt. Die ARef stimmt wohl
> noch nicht.

Der Wert stimmt exakt bei dieser Beschaltung.

> Nein nicht so, sondern:
>  Vcc o----+---------o PF0

Wenn ARef = Vcc misst du die angelegten Vcc 5V. Wenn ARef intern kleiner 
5V (habe im Datenblatt nicht nachgesehen, welche ARef du einstellst), 
zeigt 1023 Vollausschlag des 10-Bit ADC d.h. ggf. Übersteuerung 
gegenüber eingestelltem ARef.

Experimentiere mal mit dem Potentiometer und lese dir das Tutorial zum 
ADC durch.

Autor: Daniel F. (mcnanuk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> ADMUX |= (0<<REFS1) | (1<<REFS0);

Danke das hab ich auch gerade gesehen.

So nun zeigt der AD Wandler wenigstens was an :)
Aber die Werte springen wie wild auf und ab.

Mein analogsignal liegt bei 400 mV. Da sollten doch 5v als VRef locker 
passen. Maximumsignal ist 1V.
Das heisst doch pro AD-Wert passen knapp 5 mV rein, und ich sollte dann 
bei ca 200 als AD-Wert landen. Oder liege ich falsch...

Alles sehr merkwürdig grade für mich. Der Code hat auf dem STK 500 
wunderbar gepasst. Nur hier stimmt irgendwas nicht.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel F. schrieb:
> Karl heinz Buchegger schrieb:
>> ADMUX |= (0<<REFS1) | (1<<REFS0);
>
> Danke das hab ich auch gerade gesehen.
>
> So nun zeigt der AD Wandler wenigstens was an :)
> Aber die Werte springen wie wild auf und ab.

Was heißt "wie wild auf und ab"?
Die letzte Stelle mag unter Umständen um +-1 oder 2 schwanken, aber der 
Rest müsste stabil stehen.

Autor: Daniel F. (mcnanuk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nein vollig willkürlich ... 134 600 800 5 1000 33 und so weiter

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel F. schrieb:

> Mein analogsignal liegt bei 400 mV. Da sollten doch 5v als VRef locker
> passen. Maximumsignal ist 1V.

Was ist das genau für ein "Analogsignal"? Woher kommt das? Das hört sich 
fast nach einem Line-In bzw. Audiosignal an.

Schwankt die Anzeige auch, wenn du mit einem Spannungsteiler 
(Potischaltung s.o.) und einem konstanten Gleichspannungssignal 
experimentierst?

> Alles sehr merkwürdig grade für mich. Der Code hat auf dem STK 500
> wunderbar gepasst. Nur hier stimmt irgendwas nicht.

Hast du schon die Hardware beider Boards verglichen, wie das Messignal 
beim Eingang in den ADC auf beiden Boards stabilisiert wird? Achte auf 
den eventuell vorhandenen Kondensator.

Autor: Daniel F. (mcnanuk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Signal kommt von einem digitalen Barometer. Die Anzeige ist 
konstant. Die Ausgabe auch....

Das STK 500 ist Geschichte... das war ein anderes Projekt. Das spielt da 
nimmer mit rein.

Autor: Daniel F. (mcnanuk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab den Code mal aufs Minimum reduziert. Und immer noch zeigt der AD 
Wandler völlig wirre Werte an. volles Spektrum von 0 bis 1023 und 
zurück. jeder Schleifendurchlauf nen völlig andere Wert. Kein Muster 
erkennbar.

Da bin ich mit meinem Latein am Ende. Woran kann sowas liegen? Muss ich 
doch die Lötbrücke schliessen ? Was ist dann die richte Einstellung für 
Aref?
#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include <string.h>
#include "glcd-Display3000-211.h"

 
#define F_CPU 16000000UL

 
/* Initialisiert den AD Wandler */
void init_adc(void)
{
 //ADC aktivieren, Prescaler 128
 ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);   
}


uint16_t readADC(uint8_t mux)
{
  uint8_t i;
  uint16_t result;
 
  ADMUX = mux;                      // Kanal
  ADMUX |= (0<<REFS1) | (1<<REFS0); // 
 
  /* 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 = ADC;  // ADC muss einmal gelesen werden,
                  // sonst wird Ergebnis der nächsten Wandlung
                  // nicht übernommen.
 

  result = 0; 
  for( i=0; i<1; i++ )
  {
    ADCSRA |= (1<<ADSC); 
    while ( ADCSRA & (1<<ADSC) ) {
      ; 
    }
    result += ADC;  
  }
 
  result /= 1;                
 
  return result;
}

int main( void )
{
  unsigned char buffer[30];  

  uint16_t adcval;


  init_adc();  
  LCD_Init();  // caution: this also defines SPI for the display and also PortB (all ports but MISO are output) 
  
  delay_ms(1000);
       LCD_Cls(black);  

  adcval = readADC(0);
  LCD_Cls(black);
  Orientation = Portrait180;
  LCD_Print(itoa(adcval,buffer,10), 1, 1, 2, 1, 1, green, black);
 
  while(1){

    adcval = readADC(0);
  LCD_Cls(black);
  Orientation = Portrait180;
  LCD_Print(itoa(adcval,buffer,10), 1, 1, 2, 1, 1, green, black);
 
  delay_ms(1000);


  }
}

//  Enhanced delay-routine (wait) as as the standard delay routine (_delay_ms) is not able to delay
//  more than 17 ms maximum as of the used 8-bit-timer (depending on used crystal)
void delay_ms(uint16_t period)   //delay routine (milliseconds)
{
  for(unsigned int i=0; i<=period; i++)
    _delay_ms(1);
}




Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel F. schrieb:

> Da bin ich mit meinem Latein am Ende. Woran kann sowas liegen? Muss ich
> doch die Lötbrücke schliessen ?

Vergiss endlich mal die Lötbrücke.
Schnapp dir ein Multimeter und miss die Spannung am ARef Pin nach. So 
wie du die Software hast, werden da 5V angezeigt werden (bzw. was du als 
Versorgungsspannung hast).

> Was ist dann die richte Einstellung für
> Aref?

ARef wird für Standardanwendung mit 100nF nach GND verbunden. Die 
Auswahl der Referenzspannung macht man im Programm.
Erst bei Sonderfällen legt man selber eine Spannung an ARef an und wählt 
im Programm aus, dass diese zu verwenden ist.

Leg doch mal eine konstante Spannung mit einem Poti an, damit wir mal 
den unbekannten Ausgang deines Barometers durch etwas Bekanntes ersetzt 
haben.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das Signal kommt von einem digitalen Barometer.

Was weißt du darüber?

digitales Barometer und ADC ... das passt jetzt erst mal nicht wirklich 
zusammen. Was ist das für ein Teil? Datenblatt?

Autor: Rolf Pfister (rolfp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel F. schrieb:
> nein vollig willkürlich ... 134 600 800 5 1000 33 und so weiter

Das sieht nach einem offenen Eingang aus. Hast du deine Spannung auch 
wirklich am richtigen Pin angeschlossen?
Oder vielleicht vergessen AGnd anzuschliessen?

Rolf

Autor: Daniel F. (mcnanuk)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das Barometer kann digital am PC über RS232 ausgelesen werden, oder 
Analog über ne einfache Leitung

Das Barometer misst Drücke 0...2000mbar und zeigt dabei eine Spannung 
vom 0...1V

Das Funktioniert auch alles.

Am ARef messe ich 5 V konstant.

Die Werte schwanken auch, wenn der Barometer ausgeschalten ist
Airflow DB2 heisst das Ding.

@ Rolf
>Oder vielleicht vergessen AGnd anzuschliessen?
was meinst du damit ? Ich habe dort einen GND Pin neben dem ARef. Aber 
angeschlossen ist da nix.

Ich weiß ich soll es vergessen, aber auch der GND Pin verfügt über eine 
offene Lötbrücke.
>Lötbrücke AGND bridge (J9):
>Ähnliches wie die Vcc Versorgung für Aref gilt für GND von Aref. Auf Wunsch 
>können Sie,
>durch Schließen der Brücke J9 hier AGND (Das Lötpad direkt über Aref, also 
>zwischen F1 und E4 auf die Standard-Masse legen.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel F. schrieb:

> Ich weiß ich soll es vergessen, aber auch der GND Pin verfügt über eine
> offene Lötbrücke.
>>Lötbrücke AGND bridge (J9):
>>Ähnliches wie die Vcc Versorgung für Aref gilt für GND von Aref. Auf Wunsch
>>können Sie,
>>durch Schließen der Brücke J9 hier AGND (Das Lötpad direkt über Aref, also
>>zwischen F1 und E4 auf die Standard-Masse legen.

Diese Brücke machst du zu.
Auch beim Mega128 gibt es kein seperates AGND sondern nur ein GND (siehe 
Datenblatt)

Deinen Sensor hast du hoffentlich nicht nur mit der Signalleitung, 
sondern auch mit seiner Masseleitung mit der Masse des Mega128-Boards 
verbunden.

Autor: Daniel F. (mcnanuk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wiso sollte ich denn die Masse des Barometers an das Board anschliessen. 
Wenn ich Modus 0 wähle, dann wird ddoch die anliegende Spannung gegen 0V 
genommen. Ich weiss beim nicht, wo ich die Masse Ader an das Board 
anschliessen soll und was das für einen Sinn ergibt. Das Barometer ist 
doch ein eigenständiges Gerät nebendran. (Batteriebetrieb)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel F. schrieb:
> Wiso sollte ich denn die Masse des Barometers an das Board anschliessen.

Plonk!

(Das war das Geräusch der Stirn die auf dem Tisch aufschlägt)


> Wenn ich Modus 0 wähle, dann wird ddoch die anliegende Spannung gegen 0V
> genommen.

Schon mal gehört, dass elektrische SPannungen Potential-DIFFERENZEN 
sind?

Ohne Masseverbindung haben unterschiedliche Teilnehmer unterschiedliche 
Vorstellungen davon, wo 0 ist.

> Ich weiss beim nicht, wo ich die Masse Ader an das Board
> anschliessen soll und was das für einen Sinn ergibt.

Such dir jemanden der wenigstens die allereinfachsten Grundlagen 
Elektronik zumindest vom Hörensagen kennt. Massen werden IMMER 
miteinander verbunden!

Autor: Daniel F. (mcnanuk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mea Culpa.... Mea... und so weiter....

passiert mir nie wieder.

Ich danke allen, die sich Zeit genommen und die Mühe gemacht haben, mir 
weiter zu helfen. Mein Projekt wird langsam so groß, dass ich den 
Überblick verliere.

Und wieder trifft das Sprichtwort zu:
Kaum macht man es richtig, schon funktioniert es.

Danke.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.