Atmega8-Spannungswert an LED-Reihe ausgeben.

Gast #507531
Lesenswert?

Hallo zusammen!
Fange gerade mit dem Programmieren an.
Hab mal ne Frage:
Ich will einen Spannungswert an eine LED-Zeile ausgeben...
Habe folgenden Code gefunden, funktioniert soweit auch prima.
Wie stelle ich es an das ich noch mehr leds anschließen kann?
Z.B. an Port D.

#include <avr/io.h>

double Leds[] =
{    0b00000000000,
  0b00000000001,
  0b00000000011,
  0b00000000111,
  0b00000001111,
  0b00000011111,
  0b00000111111,
  0b00001111111,
  0b00011111111,
  0b00100000000,

};

 FACT =( ( 1024 / ( sizeof( Leds ) / sizeof(*Leds) ) ) + 1 );

int main()
{
  int Value = 0;

  DDRB = 0xFF;
  ADCSRA = ( 1 << ADEN ) | ( 1 << ADPS2 ) | ( 1 << ADPS1 );
  ADMUX = ( 1 << MUX0 );

  ADCSRA |= ( 1 << ADSC );
  while( ADCSRA & ( 1 << ADSC ) )
    ;

  while( 1 )
  {
    ADCSRA |= ( 1 << ADSC );
    while( ADCSRA & ( 1 << ADSC ) )
      ;

    Value = ADC;
    PORTB = Leds[ Value / FACT ];

  }
}

Mfg
Sascha P.
#507958
Lesenswert?

> FACT =( ( 1024 / ( sizeof( Leds ) / sizeof(*Leds) ) ) + 1 );

auch interessant...
weder ein #define noch sonst irgendwas dabei, was für einen sinnvollen 
Zusammenhang sorgen würde.

>Wie stelle ich es an das ich noch mehr leds anschließen kann?
>Z.B. an Port D.

Erweitere "dein" Array auf 16bit und teile die 16bit auf 2 Ports auf.
#508343
Lesenswert?

Sascha P. wrote:
> Wie könnte man es denn eleganter lösen??

Indem man den passenden Datentyp nimmt, also:

uint8_t für 8 Bit
uint16_t für 16 Bit
uint32_t für 32 Bit


Float hat aber nun absolut überhaupt nichts bei Bitmanipulationen 
verloren.

Es sei denn, Du willst Dich wie andere beschweren, daß C ineffektiv ist.


Peter

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