Forum: Mikrocontroller und Digitale Elektronik ADC - immer bizarre Werte


von Michael H. (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

ich habe einen ADC an einem Mega8 und mir dazu die passende LIB 
geschrieben. Leider bekomme ich vom ADC nur Mist.

ADC läuft mit Prescaler 128, Quarz ist 14,xx MHz. Die ausgelesenen werte 
schicke ich mir über RS232.

Protokollerklähring: 0xaa steht für anfang, dann folgen die zwei Werte, 
dann 0xee für ende.

======================
00000000: aa 00 40 ee
aa 00 40 ee
aa 00 40 ee
aa 00 c0 ee

00000010: aa 00 c0 ee
aa 00 00 ee
aa 00 40 ee
aa 00 00 ee

00000020: aa 00 c0 ee
aa 00 80 ee
aa 00 80 ee
aa 00 80 ee

00000030: aa 00 00 ee
aa 00 80 ee
aa 00 c0 ee
aa 00 80 ee
=======================

Das ganze zieht sich so immer weiter.

Meine ADC datei ist im Anhang.

adc.c hänge ich in den Anhang, main folgt hier:
#include <avr/io.h>
#include <avr/interrupt.h>
#include "leds.h"
#include "edelay.h"
#include "adc.h"
#include "usart.h"

void main(void){
d  // INITZILASATION
  led_green_on();
  adc_init(0);
  adc_activate(1);

  usart0_init();


  while(1){

    usart0_putc(0xaa);
    //highvoltage_control();
    unsigned int send;
    send=adc_read_and_null(0);
    usart0_putc(send<<8);
    usart0_putc(send);
    usart0_putc(0xee);
    for(i=40;i;i--){
      edelay(64000);
    }



    if(send<256){
      led_yellow_off();
      led_green_off();
      continue;
    }else if(send<512){
      led_yellow_off();
      led_green_on();
      continue;
    }else if(send<768){
      led_yellow_on();
      led_green_off();
      continue;
    }else{
      led_yellow_on();
      led_green_on();
      continue;
    }

  }


  while(1);
}

von Karl H. (kbuchegg)


Lesenswert?

Michael H. schrieb:
>     send=adc_read_and_null(0);
>     usart0_putc(send<<8);

So wird das auch nichts, wenn du dir die Highbits links rausschiebst.

Lass dir doch das Zeugs im Klartext ausgeben. Du bist ein Mensch, du 
willst lesbare Zahlen haben!
1
void usart_puts( const char* s )
2
{
3
  while( *s )
4
    usart_putc( *s++ );
5
}
6
7
int main()
8
{
9
...
10
   char buffer[10];
11
....
12
13
      send=adc_read_and_null(0);
14
      sprintf( buffer, "%d ", send );
15
      usart_puts( buffer );
16
....

von Michael H. (Gast)


Lesenswert?

Okay, das habe ich mal gemacht;Prefix ist immer Val
online
Val 747
Val 575
Val 580
Val 578
Val 574
Val 587
Val 572
Val 594
Val 571
Val 599
Val 572
Val 600
Val 577
Val 599
Val 585
Val 593
Val 591
Val 584
Val 598
Val 579
Val 604
Val 580
Val 606
Val 579
Val 604
Val 585
Val 601
Val 590
Val 595
Val 599
Val 587
Val 607
Val 583
Val 608
Val 582
Val 608
Val 583
Val 607
Val 589
Val 600
Val 596
Val 592
Val 604
Val 586
Val 608
Val 584
Val 610
Val 581
Val 607
Val 584
Val 602

Der Wert ist unabhängig von der Spannung. Diese liegt am ADC an. Der 
Chip ist auch komplett neu.

von Michael H. (Gast)


Lesenswert?

jipphipp hura, es geht... es scheint, als sei in meiner Lib noch ein 
Fehler mit der Kanalwahl...

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
Noch kein Account? Hier anmelden.