mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADCtest mit UART von Atmega8


Autor: Wang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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"


  }
}

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>  if (value_j1_h < 80)
>     PORTC |= (1<<5);  // wenn < 80, dann schaltet LED ein

Und an welcher Stelle schaltest du die LED wieder aus?

MfG Spess

Autor: Hubert G. (hubertg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der ADC-init ist PC1 ausgewählt, nicht PC0 wie im Kommentar.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wang schrieb:
> while ( ADCSRA & (1<<ADSC) &  (!( UCSRA & (1<<UDRE)) ) )

Auch solltest Du Dir den Unterschied zwischen '&' und '&&' zu Gemüte 
führen.

Autor: Wang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
spess53 schrieb:
> Hi
>
>>  if (value_j1_h < 80)
>>     PORTC |= (1<<5);  // wenn < 80, dann schaltet LED ein
>
> Und an welcher Stelle schaltest du die LED wieder aus?
>
> MfG Spess


stimmt, habe ich vergessen, wieder auszuschalten

Autor: Wang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hubert G. schrieb:
> In der ADC-init ist PC1 ausgewählt, nicht PC0 wie im Kommentar.

Ja,richtig
PC1 ist geschaltet. nicht PC0
scheinbar, dass ich beim Umprobieren dem Kommentar falsch geschrieben 
habe.
:-p

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.