Gast
#339511
Hallo leute,
ich brauche eure Hilfe.
ich habe ein C-code für ATtiny45 geschrieben, dies code hat dies
funktionalität:
AD-Wandler wird intialisiert und gibt den Messwert wiederzurück.
in ein Feld wird das Ergebniss gespeichert.
mein Ziel ist so:wird AD-Wandler gelesen, und in erste Element
gespeichet, dann wartet einger zeit wirdi erhöht und messt wieder.
mein Problem: wenn ich ein Breackpoint setze krige ich schon die
gewünschte Messungen( d.h. unterschiedliche werte werden im Feld
gespeichert), abet wenn ich das Programm laufen lasse(ohne
Breack-point), wird im Feld die gleiche wert gespeichert.
ich habe das 20 mal durchgelesen, aber finde die lösung nicht.
hier das code
/**************main.c*************************/
#include <iot45v.h>
#include "adc.h"
#include "timer.h"
//void int_timer0(void);
//#pragma interrupt_handler int_timer0:iv_TIMER0_OVF
//int Ergebnis;
//void get_sensor(void);
unsigned int digital_wert,i;
unsigned int test[20];
void main()
{
Adc_Init();
DDRB=0x17;
PORTB=0x00;
//while(1)
for(i=0; i<=20; i++)
{
test[i]= umsetzen_Spannung();
wait_10ms(2);
PORTB=0x17;
wait_10ms(2);
PORTB=0x00;
//PORTB=0x17;
}
//PORTB=0x17;
while(1);
}
/******************Timer.c***************************/
#include "timer.h"
#include <iot45v.h>
#pragma interrupt_handler int_timer0:iv_TIMER0_OVF
unsigned int count=0;
void wait_10ms(unsigned char time)
{
TCNT0 = 173;
SREG |= (1<<7); //SREG:Bit 7 I: Global Interrupt Enable
TIMSK = (1<<TOIE0);//Timer0 Int. Enable
TCCR0B = (1<<CS02)|(1<<CS00);
while(count<time) {};
count=0;
}
void int_timer0(void)
{
//PORTB=0x17;
count++;
TCNT0 = 173;
TCCR0B = (1<<CS02)|(1<<CS00);
}
void get_sensor(void)
{
//Adc_Init();
//umsetzen_Spannung();
}
/******************adc.c*******************************/
#include "adc.h"
#include <iot45v.h>
unsigned int Ergebnis;
void Adc_Init(void)
{
ADCSRA = 0x80; //Durch das setzen von Bit ADEN schaltet
Der AD-Umsetzer ein
ADMUX = 0x03; //wählt der Kanal(ADC3) und setzt die
Rferenzspannung auf 5v
}
unsigned int umsetzen_Spannung(void)
{
ADCSRA = 0xC3; //AD-Umsetzer Starten und Prescaler
auswählen
while ( ADCSRA & (1<<ADSC)); //Warte-Schleife bis Ende der
Umsetzung
Ergebnis=(ADCL+ADCH*256);
return Ergebnis; // Im ADCL sind die ersten 8 bits des
Ergebnisses
// Im ADCH sind die restlichen 2 Bits
gespeichert
}
Danke euch