ad wandler fehlermeldung

OP #869170
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'
Ingo Laabs wrote:
> Anmerkung: habe das Programm aus einem Buch abgetipp..ist da etwa dem
> Autor ein Fehler unterlaufen??

Nein, früher gab es diesen "Befehl" noch, mittlerweile wurde dieser 
entfernt,  um näher an den C Standards zu sein.
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.
OP
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?
OP
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);
}
}
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.