Gast
#2376657
Hallo zusammen, ich habe folgendes Problem, ich will mit einem ATTINY13 mithilfe des ADC1- Einganges eine Gleichspannung "voltage" messen und bei unterschreiten eines gewissen Grenzwertes "limit" den PB4 des PORTBs setzten. Nun ergibt sich folgendes Problem, wenn ich nach der if-Abfrage von "voltage<limit" den PORTB setzte explodiert die Hex-File auf größe von ca. 7,7KB und passt somit nicht mehr auf den ATTINY13. Wenn ich nun aber nur das setzen des PORTB aus der Anweisung der if-Abfrage kommentiere beträgt die Größe der Hex-File nur noch ca. 450 byte. Woher kommt das? Kann mir jemand weiterhelfen? Über Antworten freue ich mich!! :) Hier der Quelltext: #define XTAL 8e6 #define F_CPU XTAL #define limit 17.4368 #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include "C:\AVR\Includes\BitUtilities.h" float voltage; //Variable für ADC-Ergebnis int main(void) { DDRB = 0b010000; // PortB4 as output PORTB = 0b000000; // portB4 setzten // initialize ADC Prescaler=64 (8 MHz/64=125 kHz) ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1); // activate ADC ADMUX = 0x01; // select channel (ADC1) ADMUX |= (1<<REFS0); // internal reference // first = dummy conversion ADCSRA |= (1<<ADSC); // single converson while ( ADCSRA & (1<<ADSC) ); // wait for ADC ready voltage = ADCW; // get value voltage = 0; // discard dummy value while (1) { // get ADC data - AREF=2.56V, 10 Bit A/D-Converter: 2^10-1=1023 ADMUX = 0x01; // select channel (ADC1) ADMUX |= (1<<REFS0); // internal reference // start conversion - 4 times averaging voltage = 0.0; for(unsigned int i=0;i<4;i++) { ADCSRA |= (1<<ADSC); // single conversion while ( ADCSRA & (1<<ADSC) ); // wait for ADC ready voltage += ADCW; } _delay_ms(500); if (voltage < limit) ; //Semikolon für leere if-Anweisung //PORTB = 0b010000; //Rücksetzen des PORTB4 } return 0; }