Gast
#1625565
Hallo zusammen,
Ich habe ein Problem beim Abspeichern von Messwerten. Ich habe ein Array
definiert und möchte in einer ForNext Schleife die Werte des
Analog/Digitalwandlers einlesen und in dem Array speichern
if (c[1] == 50)
{
PORTD |= (1<<PD3);
for (j=0;j<250;j++)
{
c[j] = ADCH;
}
}
Wenn ich die Werte dann auslese sind alle 250 Messwerte gleich (51)
obwohl sich die Spannung beim Messen geändert hat. Aufgrund der
If-Anweisung fange ich erst ab Wert50 an zu speichern. Funktioniert das
Einlesen mittels For Next Schleife nicht? Untenstehend noch das
komplette Programm.
Danke für Eure HIlfe.
Gruß
Holger
#define PROZESSORTAKT 3680000
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include "rs232.h"
/* ==== INTERRUPT HANDLER: ADC Conversion Complete === */
SIGNAL (ADC_vect)
{
// unsigned char c;
unsigned char c[250];
char temp[5];
int j,i;
PORTD |= (1<<PD2); //Pull up von PD2 einschalten
DDRD &= ~ (1<<PD2); // PD2 als Eingang
DDRD = (1<<PD3)| (1<<PD4); // Pin D3 und D4 als Ausgang
// ADC Resultat einlesen =======================
c[1] = ADCH; /* Nur ADCH lesen, weil 8-Bit Modus */
if (c[1] == 50)
{
PORTD |= (1<<PD3);
for (j=0;j<250;j++)
{
c[j] = ADCH;
}
}
// ADC Resultat auf RS232 ausgeben ============/
if (!(PIND & (1<<PIND2)))
{
PORTD |= (1<<PD4);
for (i=0;i<250;i++)
{
itoa(c[i], temp, 10); /* In einen String konvertieren ... */
uart_putchar('\n');
uart_putstring(temp);
}
}
}
int main(void)
{
/* RS232 einschalten ...*/
setup_uart();
uart_putline("[ EasyADC -- www.avrbuch.de ]");
// Alle Interrupts erlauben
sei();
// ADC, 8-Bit im Free Running Mode mit Interrupt
// Referenzspannung: VCC
// Takt: Systemtakt / 2 (4 MHz bei 8Mhz Quarz)
ADMUX = (1<<REFS0) | (1<<ADLAR);
ADCSRA = (1<<ADEN) | (1<<ADFR) | (1<<ADIE);
// ADC starten!
ADCSRA |= (1<<ADSC);
// Endlosschleife
while (1) ;
return 0;
}