Forum: Compiler & IDEs Vektor speichern


von Afuf B. (afif)


Lesenswert?

Hallo ,
Ich wollte werte von mein Adc_read() jedes 10 ms im eeprom speichen und
wider in LCD zeigen .Aber  funktioniert nicht:die werte sind irgendwie
falsch .Warum?


void Initialization(void);
EMPTY_INTERRUPT(__vector_default);//alle Interrupt ausprungen die nicht
belegt sind
    SIGNAL(SIG_OUTPUT_COMPARE0)//zielwert A erreicht wird,
    {
    zaehler++;


    }


void Delay(unsigned int millisec);
void OSCCAL_calibration(void);



int main(void)
{
    PGM_P statetext = PSTR("KRAIS_SAEGER");
  uint8_t input, buttons;
  uint8_t last_buttons = KEY_NULL;
  uint8_t vektor[20];
    Initialization();
   timer0_init() ;//10ms der schritt
    sei();

    for (;;)
    {
        if (statetext) {
      LCD_puts_f(statetext, 1);
      LCD_Colon(0);
      statetext = NULL;
    }

      for(int i=0;i<20;i++)
            // Read buttons
    {   if(zaehler ==i*10&& zahl==0)
                 {
               vektor[i] =ADC_read();
            if(i==20)
            zahl=1;
          }


        }StoreEEPROM(vektor,20,0x030);
        Delay(500);
          input = getkey();
    switch (input) {
      case KEY_ENTER:


           LoadEEPROM(vektor,20,0x030);
           Delay(500);
                 for(int b=0;b<20;b++)
          { Delay(2000);
            itoa ((vektor[b] ),buffer,10);

            LCD_puts(buffer,1);

              }
danke

von Karl H. (kbuchegg)


Lesenswert?

> die werte sind irgendwie falsch

Kannst Du 'irgendwie falsch' naeher definieren?

von Afuf B. (afif)


Lesenswert?

Die Werte in  ButterflyLCD sehen so aus:
215 37 25 26 100 39...
Ich denke dass die messungen nicht in EEprom gespeichert sind ...

von Karl H. (kbuchegg)


Lesenswert?

Super

Und wie sollten die Werte aussehen?

Lass Dir doch nicht alles aus der Nase ziehen.
Wenn Du den Verdacht hast, dass die Werte falsch
abgespeichert werden, dann ist es wohl naheliegend
zhunaechst mal auszugeben was dann ins EEProm
geschrieben wird. Danach schreibt man die Werte
rein, liest sie aus und vergleicht die gespeicherten
Werte mit dem was eigentlich drinnen stehen sollte
(das weiss man, weil man sich das ja zuvor hat
ausgeben lassen).

> Ich denke dass die

Das (naemlich raten) macht man nur, wenn man ueberhaupt
nichts anderes hat, oder es keine Moeglichkeit gibt
eine reproduzierbare Ausgangssituation zu schaffen.
In allen anderen Faellen gilt: zunaechst muss man mal
die Fehlersituation reproduzierbar hinkriegen. Alles
andere ist stochern im Nebel. Und ja: reproduzierbar
machen kann auch bedeuten, dass man sich ein eigenes
Testprogram schreibt. In Deinem Fall: Ein simples Programm
das einfach nur einen (bekannten) Wert ins EEprom
schreibt und diesen wieder ausliest. Durch das schreiben
dieses Testprogrammes fallen dann schon mal moegliche
andere Fehlerquellen (Stichwort: Wer sagt Dir eigentlich
dass der ADC vernuenftige Werte liefert?) weg und Du kannst
Dich nur auf das EEProm und sonst nichts konzentrieren.
Ein beliebter Fehler aller Programmier-Anfaenger ist immer
wieder: zu viele Baustellen auf einmal und dann kommen
sie mit der sich daraus ergebenden Komplexitaet nicht
mehr zurecht. Also: Einzelkomponenten testen:
* Ein Pgm, dass nur den ADC ausliest und die Werte anzeigt
* Ein Pgm, dass nur Werte ins EEprom schreibt und von dort
  liest.
Erst wenn beides ohne Probleme klappt und Du jeden einzelnen
Schritt im Pgm genau verstehst werden beide Teile kombiniert.

von Afuf B. (afif)


Lesenswert?

danke karl für dein Rat .
Ich versuche mein Frage besser zu stellen:
Ich will die Werte ein Analog Signal jedes 10 ms im LCD zeigen damit
ich diese Kurve zeichen kann.
Kann man diesen werte mit der ADC Voltage(J407) der AVR-BUTTERFLY lesen
mit diesem Taktrate oder muss mann derJTAG(J402)benutzen ?
Wenn Das mit JTAG gemacht wurde, wie kann ich auf ADC wert zugreifen?
(Ich habe schon die disable_JTAG() geschrieben)
danke für eure Geduld!

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.