ADC - immer bizarre Werte

Gast #1370762
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);
}
Angehängte Dateien:
#1370773
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
....
Gast #1370805
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren