Forum: Projekte & Code ADC mit 8535


von Max (Gast)


Lesenswert?

hallo!

void main(void)
{
  unsigned int x;

  outp ((1<<ADEN) & 3, ADCSR);

  outp ((1<<PINA1), ADMUX);        // Kanal an Pin 1 auswählen
  sbi (ADCSR, ADSC);

  while (bit_is_set (ADCSR, ADSC)); /* Nur warten */;
  x = (__inw(ADCL));               // Wert auslesen

}

Hab einen Fehler beim kompilen und zwar bei der Zeile "x = 
(__inw(ADCL));". kann mir jemand weiterhelfen? hab einen 8535er

gruß,
Max

von franz (Gast)


Lesenswert?

Probier's mal so:

x=inp(ADCL);     // einlesen des Wertes, Low..
x=x|(inp(ADCH)<<8);  // ..High

(Hoffe dass es stimmt (bin nicht mehr ganz nüchtern))

Grüße,
Peter

von Max (Gast)


Lesenswert?

also ich hab es jetzt umgeschrieben und zwar:

void main(void)
{
  int x;
  char buffer[16];

  outp ((1<<ADEN) & 1, ADCSR);

  outp ((1<<PINA1), ADMUX);
  sbi (ADCSR, ADSC);

  while (bit_is_set (ADCSR, ADSC)); /* Nur warten */;

  x=inp(ADCL);       // einlesen des Wertes, Low..
  x=x|(inp(ADCH)<<8);     // ..High

  lcd_init(LCD_DISP_ON);
      lcd_clrscr();
      itoa(x,buffer,10);
      lcd_puts(buffer);

  for(;;);
}

jedoch tut sich immer noch nichts und es zeigt nur 0 auf dem LCD an. An 
welchem Port knn ich jetzt die zu messende Spannung anschließen? (PA0 
odeR?). Und stimmen das Programm von den Werten in den Registern 
überhaupt?

Bitte um Hilfe.

MfG,
Max

von franz (Gast)


Lesenswert?

Vielleicht irre ich mich, aber:
wenn Du ADMUX auf PINA1 setzt, ist der PA1-Eingang aktiv, oder? (Es gibt 
ja auch PINA0)

MfG.,
Peter

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.