Forum: Compiler & IDEs ADC am Atmega16


von Yoschi (Gast)


Angehängte Dateien:

Lesenswert?

Hab da des Progi zum AD Wandeln und zum rauschicken auf die serielle.
USART.h und die seriell.c sind da jetzt nicht dabei aber die
funktionieren mit Sicherheit.
Irgendwie bekomm ich aber gar nichts auf die serielle (schaus mir übers
Hyperterminal an)
bin noch ein µC Nub würde mich aber freuen wenn mir jemand helfen
könnte.
Thx Yoschi

von Rainer S. (rainersp)


Lesenswert?

Meine Vermutung als atmel-noob: Initialisierung der seriellen
Schnittstelle (UART)?

von Yoschi (Gast)


Angehängte Dateien:

Lesenswert?

na eben des muss passen. als das is mei c file wo i initialisiern tu.
muss gehen! weil wenn i an char oder an string rausschreib gehts.

von Rainer S. (rainersp)


Lesenswert?

Wenn Deine Methode InitRS232 nicht irgendwo implizit aufgerufen wird,
dann ist es toter Code. Du musst das Ding schon verwenden ,-)

von Yoschi (Gast)


Lesenswert?

PEINLICH PEINLICH! Danke für die Hilfe.

von Rainer S. (rainersp)


Lesenswert?

Bitte.

von Yoschi (Gast)


Angehängte Dateien:

Lesenswert?

So hab das jetzt so gmacht wie ich es eigentlich gerne hät! also mit
High und Lowbyte. eigentlich eh recht schön beschrieben.
Nur wenn ich es jetzt übers Hyperterminal z.b erfassen möchte lässt
sich dei Com meistens nicht öffnen auser ich halte den reset gedrückt
bis ich sie offen habe. Dann gehts. aber auch dann erkenn ich nicht
unbedingt irgendeine unterschiede wenn ich die eingangsspannung ändere.
Auch mit der entsprechenden Erfassungssoftware die für dieses
Datenformat ausgelegt wäre krieg ich nicht undbedingt sinnvolle sachen
rein.
liegts hier an der µC software?
Danke im Vorraus

von Branko Golubovic (Gast)


Lesenswert?

Versuchst du mit dem mall dein ADC zu testen:
http://www.mikrocontroller.net/forum/read-4-260506.html#new
Vielleicht kannst du dein Programm auch so schreiben:

uint8_t  Buffer[20];
uint8_t  iChannel = 0;
int16_t  ADCdata;

int16_t  read_adc(uint8_t input);

int main(void)
{


  InitRS232();

  adc_init();

  while (1)
  {

    iChannel++;

    if (iChannel>7) iChannel=0;// IChannel von 0 bis 7
          ^^
    ADC_data=read_adc(iChannel);
    itoa(ADC_data,Buffer,10);
    uart_puts(Buffer);
    uart_puts("\t"); // horizontal Tabulator
    iChannel++;
      if (iChannel>7)
    {
     iChannel=0;
     uart_puts("\n");// Zeilen Umbruch
     }
    delay();
  }
return 0;
}

von Yoschi (Gast)


Lesenswert?

So jetzt hab i mein Programm auf single Ended umgeschrieben und zum
anfang nur für einen Kanal zum testen(laut GCC - Tutorial) aber
irgendwie kommt noch immer nix gscheides raus. Was mich vor allem
wundert ist das ich "auf den Reset knopf bleiben muss" bis ich die
com im Hyperterminal geöffnet habe. Sonst lässt sie sich gar nicht
öffnen.
Liegts vielleicht daran wie ich meine Daten umstelle:
(Brauch sie aber dringend so laut meinen Kommentaren.)
buffer = (ADCH<<8) | ADCL;

    //buffer aufbau:
    //0 0 0 0 0 0 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0


    //Resultierendes Ergebniss für Lowbyte:

    //D3 D2 D1 D0 Ch2 Ch1 Ch0 0
        lowbyte=(buffer<<4);
        lowbyte &= 0xF0;
        lowbyte |= iChannel<<1;


    highbyte=(buffer>>2);
        highbyte&=3;
        highbyte|=(1<<0);
        highbyte|=(1<<1);

    //Resultierendes Ergebniss für highbyte:
    // D9 D8 D7 D6 D5 D4 1 1

Irgendwie versteh ich gar nichts mehr. Das kann doch nicht so schwer
sein einen ADC am Atmega zu machen.
mfg Yoschi

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.