ad wandler fehlermeldung

#869170
Lesenswert?

Habe ein Problem:
Will ein Programm schreiben was mir den
AD Wandler ausliest..nun bekomme ich fogende Fehlermeldung:

C:\Dokumente und Einstellungen\Administrator\Eigene 
Dateien\default/../PORTAUSGABE_AVR_C.c:24: undefined reference to `sbi'

bei dem u.g. Programm..wo liegt der Fehler


#define TRUE 1
#define FALSE 0
#define F_CPU 800000UL

#include <avr/io.h>
#include <util/delay.h>


int main (void)
{
DDRA = 0xff;
DDRB = 0xff;
ADCSR = 0xc5;

while(1)

{
loop_until_bit_is_clear(ADCSR,ADSC);
PORTB = ADCL;
PORTA = ADCH;
sbi(ADCSR,ADSC);
}
}



C:\Dokumente und Einstellungen\Administrator\Eigene 
Dateien\default/../PORTAUSGABE_AVR_C.c:24: undefined reference to `sbi'
#869204
Lesenswert?

Ich schreibe generell in jedes Programm folgendes:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <avr/sleep.h>
#include <avr/wdt.h>
#include <avr/eeprom.h>
#include <stdlib.h>
#include <util/delay.h>

Das dürfte fast alles was man auf dem µC häufig verwendet abdecken.
#869219
Lesenswert?

ahhh..da

#define bit_is_clear(sfr, bit) (!(_SFR_BYTE(sfr) & _BV(bit)))

/** \def loop_until_bit_is_set
    \ingroup avr_sfr

    \code #include <avr/io.h>\endcode

    Wait until bit \c bit in IO register \c sfr is set. */


gibt es irgendwo eine Beschreibung der Möglichkeiten
der Funktionen von avr/io?
#869268
Lesenswert?

Habe immer noch Probleme mit AD Wandlung
Habe LED´s an Port A und versuche ADC9 an Pin 9 vom Tiny26
zu wandeln..aber geht nicht



#define TRUE 1
#define FALSE 0
#define F_CPU 800000UL



#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <avr/sleep.h>
#include <avr/wdt.h>
#include <avr/eeprom.h>
#include <stdlib.h>
#include <util/delay.h>


int main (void)
{
DDRA = 0xff;   // Port A = Ausgang
DDRB = 0x00;   // Port B = Eingang


ADMUX = 0x09;  //ADC9
ADCSR = 0xc5;

while(1)

{
loop_until_bit_is_clear(ADCSR,ADSC);
PORTA = ADCL;


ADCSR |= (1<<ADSC); //sbi(ADCSR,ADSC);
}
}
#869292
Lesenswert?

Es macht erstens nur wenig Sinn, nur das Low-Byte des 
Wandlungsergebnisses (ADCL) zu lesen, und zweitens funktionier das genau 
einmal. Wenn ADCL gelesen wurde, muss grundsätzlich anschließend ADCH 
gelesen werden. Erst nach dem Lesezugriff auf ADCH wird das 
Ergebnisregister wieder für ein neues Ergebnis freigegeben. Wenn nur 
ADCL gelesen wird, kann der ADC kein neues Ergebnis in dem Registerpaar 
ablegen. Wenn Du nur 8 Bit vom Ergebnis haben willst, dann setze das 
Steuerbit ADLAR. Das Wandlungsergebnis wird in dem Fall linksbündig in 
den beiden Ergebnisregistern abgelegt, und es muss nur noch ADCH 
ausgelesen werden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren