BID = 88865
MatthiasAsselborn Stammposter
   
Avatar auf fremdem Server ! Hochladen oder per Mail an Admin
Beiträge: 411 Wohnort: Altenstadt
|
Hallöchen
habe vor den ADC auszulesen und dann den Wert
auf einen Ledbalken auszugeben
( Vu Mmeter ) klappt auch schon ganz gut !
nur bis jetzt hab ich es ja nur auf einen Ledbalken
( 12 leds ) gebracht
wie erweitere ich das im Multiplexverfahren
so dass ich 8 ports durchschalte zu je 12 led s
mit 8 verschiedenen AD Wandler Eingängen schalten kann ?
anbei mein bisheriger code
sind da statt 12 16 leds ...hab da mal was ausproiert ...
und die Prozedur " Schalten gilt natürlich für den Zzweck auch nicht .."
#include
#include
#define ADC_VREF_TYPE 0x40
#define DEF_ADC_MASK 0x07
inline unsigned int start_adc(unsigned char adc_input)
{
ADMUX=(adc_input & DEF_ADC_MASK)|ADC_VREF_TYPE;
ADCSRA|=0x40;
}
inline unsigned int read_adc(unsigned char adc_input)
{
while ((ADCSRA & 0x10)==0);
ADCSRA |= 0x10;
start_adc(adc_input);
return ADCW;
}
inline void Ausgabe(unsigned int Wert)
{
if (Wert>=114)
{
PORTB.5=0;
PORTB.6=0;
}
else if (Wert>=102)
{
PORTB.5=1;
PORTB.6=0;
}
else
{
PORTB.5=1;
PORTB.6=1;
}
if (Wert>=286)
PORTD = 0x00;
else if (Wert>=256)
PORTD = 0x80;
else if (Wert>=229)
PORTD = 0xC0;
else if (Wert>=204)
PORTD = 0xE0;
else if (Wert>=178)
PORTD = 0xF0;
else if (Wert>=163)
PORTD = 0xF8;
else if (Wert>=142)
PORTD = 0xFC;
else if (Wert>=128)
PORTD = 0xFE;
else
PORTD = 0xFF;
if (Wert>=721)
PORTC = 0x00;
else if (Wert>=644)
PORTC = 0x80;
else if (Wert>=572)
PORTC = 0xC0;
else if (Wert>=511)
PORTC = 0xE0;
else if (Wert>=455)
PORTC = 0xF0;
else if (Wert>=403)
PORTC = 0xF8;
else if (Wert>=363)
PORTC = 0xFC;
else if (Wert>=321)
PORTC = 0xFE;
else
PORTC = 0xFF;
}
inline void Schalten(void)
{
unsigned char Kanalnummer;
for (Kanalnummer = 0; Kanalnummer < 64; Kanalnummer++)
{
PORTB = (Kanalnummer) | (PORTB & 0x60);
Ausgabe(read_adc(0));
}
}
void main(void)
{
DDRB=0xFF;
DDRC=0xFF;
DDRD=0xFF;
ACSR=0x80;
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x88;
SFIOR&=0xEF;
start_adc(0);
while (1)
{
Schalten();
};
}
|
BID = 89763
lynx Gerade angekommen
Beiträge: 10
|
tut mir leid, ich programmier nur in assembler, von C hab ich nicht ganz so die peilung
prinzipiell würd ich das so machen:
eine schleife in der die A/D gewandelten Werte nacheinander zyklisch ausgelesen werden (und dann in ein "schnittstellenregister" gespeichert werden, welches dann auf den leds angezeigt wird)
|