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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.