Forum: Compiler & IDEs Atmega8-Spannungswert an LED-Reihe ausgeben.


von Sascha P. (Gast)


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.

von Stefan (Gast)


Lesenswert?

Hast du keine eigene Idee, wie das gehen könnte?

von johnny.m (Gast)


Lesenswert?

> double Leds[] =
> {    0b00000000000,
>  ...
Was soll denn da bitteschön "double"? "double" sind Gleitkommazahlen!

von Rahul D. (rahul)


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.

von Sascha P. (Gast)


Lesenswert?

Wie könnte man es denn eleganter lösen??

von Peter D. (peda)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.