problem mit AD Wandler0809

Gast #1877158
Lesenswert?
• ▲
▼
Hallo

ich habe gerade ein AD Wandler besorgt und wollte überprüfen ob es 
funktioniert.hab ihn mit ein atmega16 angeschlossen und wollte über LEDS 
das Ergebniss von der convertierung sehen.das problem dass alle LEDS an 
PORTD immer an sind trotz dass ich die Spannung an IN0 ändere.

wäre nett wenn jemand mir hilfen kann
Danke im Voraus
hier bei mein source code:

#include <avr/io.h>
#include <stdint.h>
#include <avr/interrupt.h>
#include <avr/delay.h>
#include <inttypes.h>



#define C     PA6
#define B     PA5
#define A     PA4
#define EOC   PA3
#define data  PORTC
#define TRUE  1
#define FALSE 0
volatile int8_t state=0;

unsigned short adc(unsigned char admux);
unsigned char ADC0809(unsigned char channel);

void TIMER1_interrupt_init(void);
void init_ports();





int main()
{

  unsigned char d;
  init_ports();
  IMER1_interrupt_init();

  sei();

  while( 1 )

  {


    d=ADC0809(0);
    PORTD=d;






  }
}

void init_ports()
{
DDRD=0xFF; //PORTD als Ausgang
PORTD =0x00;
DDRC=0x00; //PORTC als EINGANG
PORTC =0xFF;
DDRB=0xFF; //PORTB als Ausgang
PORTB =0x00;
DDRA=0xF0;
PORTA =0x08;
}

unsigned char ADC0809(unsigned char channel)
{
  unsigned char adwert;

  if ( channel == 0 )
  {
   PORTA &= ~ ( 1 << A) | ( 1 << B) | ( 1 << C) ;
  }
  if ( channel == 1 )
  {
   PORTA &= ~ ( 1 << B) | ( 1 << C) ;
   PORTA |=   ( 1 << A);
  }
  if ( channel == 2 )
  {
   PORTA &= ~ ( 1 << A) | ( 1 << C) ;
   PORTA |=   ( 1 << B) ;
  }
  if ( channel == 3 )
  {
   PORTA &= ~ ( 1 << C) ;
   PORTA |=   ( 1 << A) | ( 1 << B) ;
  }

  PORTD |=  ( 1 << START );
  PORTD &= ~( 1 << START );

  while(EOC==0);     //check for EOC to go high
  PORTD |=  ( 1 << OE );//enable output data
  adwert=data;      //read data
  PORTD &= ~ ( 1 << OE );            //disable adc


return adwert;          //return data
}
//ISR Für den ADC0809 CLOCK
ISR(TIMER1_COMPA_vect){
PORTB=state;
if ( state ==0 )
state=1;
else state=0;
}

void TIMER1_interrupt_init(void)
{
TCNT1=0; //Anfangszählerstand = 0
OCR1A=5; //Zähler zählt bis 5: 125000/5 = 200000  200kHz
TCCR1B=0x02; //CTC-Modus: Takt intern von 8 Mhz /8 = 1000000Hz
TIMSK|=(1<<OCIE1A);//Timer/Counter1 Compare A Match Interrupt 
aktivieren:

}

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.