ADCtest mit UART von Atmega8

Gast #1777850
Hallo zusammen,

ich habe ein ADC Programm geschrieben. danach möchte ich mit UAST 
serieller Schnittstelle ein Zeichen schicken, um ADC zu testen. ADC ist 
mit Joystick verbunden.

das programm testet einen ADC Kanal, wenn Joystick nach oben drücken, 
LED soll leuten. wenn Joystick nach unten drücken, sendet ein Zeichen "a 
" über serieller Schnittstelle an PC "HyperTerminal" mit 9600 hz von XP.

Nach "Build" gibt es keine Fehler. aber LED leuchtet immer, egal ob ich 
nach oben oder unten drücke.

ich weiß nicht, wo ich wahrscheinlich Fehler gemacht habe.

gruß

Wang

****************Programm ist hier********************

#include <avr/io.h>
#include <avr/interrupt.h>

#define FOSC 16000000 //
#define BAUD 9600 // Einstellung der Baud Rate 9600

/*************************************
Funktion: ADC Initialisierung
**************************************/

void InitADC(void)
{
  ADMUX =(0<<REFS1)|(1<<REFS0)|(0<<MUX1)|(1<<MUX0);  // ADC Ref auf 
Avcc, PC0 gewaehlt
              /*****MUX1******MUX0*****Single
                  0      0    ADC0(PC0)  J1_H
                  0      1    ADC1(PC1)  J1_V
                  1      0    ADC2(PC2)  J2_H
                  1      1    ADC3(PC3)  J2_V
              */

  ADCSRA =(1<<ADEN)|(1<<ADSC)|(0<<ADPS0)|(1<<ADPS1)|(1<<ADPS2); // ADC 
eingeschaltet, 64 Bit Prescale
}

/*************************************
Funktion: USART Initialisierung
**************************************/

void init_usart(void)
{
  UBRRH = (FOSC/BAUD/16-1)/256; // Form der Buad Rate: 8 bit H
  UBRRL =  (FOSC/BAUD/16-1)%256; // 8 bit L

  //Empfang, Send und RX Complete Interrupt vom Register aktivieren
  UCSRB |= (1 << RXEN)|(1 << TXEN)|(1 << RXCIE);
}

/****************
***** Main *****
****************/

void main(void)
{
  uint16_t 
sample_j1_h,value_j1_h;//,value_j2_h,value_j2_vsample_j1_v,j,,value_j1_v 
;

    DDRC |= (1<<5);  //PC5 als Ausgang
   InitADC();
   init_usart(); // USART initialisieren


  while(1)
  {
      sample_j1_h = 0;

    while ( ADCSRA & (1<<ADSC) &  (!( UCSRA & (1<<UDRE)) ) )
    {
       ;     // auf Abschluss der Konvertierung warten
      }
      value_j1_h = ADCW;

      ADCSRA |= (1<<ADSC); //single conversion mode restart

  if (value_j1_h < 80)

     PORTC |= (1<<5);  // wenn < 80, dann schaltet LED ein
    else
        UDR = 0x55;
    //send_usart('a');  // wenn >= 80, dann send Zeichen "a"


  }
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.