mikrocontroller.net

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


Autor: Sascha P. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du keine eigene Idee, wie das gehen könnte?

Autor: johnny.m (Gast)
Datum:

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

Autor: Rahul Der trollige (rahul)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sascha P. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie könnte man es denn eleganter lösen??

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.