www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LED, µC und autobatterie


Autor: Matthias (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag,

ich will mir eine Unterbodenbeläuchtung für ein Auto (showcar) Bauen.

Da ich verschiedene Programe brauche, habe ich mir ein kleines Program 
für einen µC geschrieben.

Da die LEDs nicht einfach ausgehen sollen, sondern "langsam" habe ich 
einfach einen BUZ11 (der mir in einem anderen anderes Projekt hier 
empfohlen wurde) hergenommen. Daran hab ich den Elko und einen 
Widerstand mit 10k gegen Masse gelegt und vor dem µC einen Diode um den 
zu schützen.

So müsste es doch eigentlich klappen oder?

gruß
Matthias

Autor: Michael H. (morph1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schnittlauch oder Bärlauch?

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HÄÄÄÄÄÄÄÄÄÄ was soll die antwort denn?

Autor: ernie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
fieleicht meind der michael das du mahl meer auf deine rechtschreipung 
achden solltesd?!

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
achso, ja das höre ich leider öfters.


Ich bin Legastheniker. Ich tu mir da schwer. Ich muss mir wohl 
angewöhnen eine Rechtschreibprüfung zu verwenden!

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Lösung mit dem Kondensator ist nicht gut, die Helligkeit der LED 
wird nicht gleichmässig mit der Spannung am Kondensator abnehmen. 
Vermutlich müsstes Du eher 100 kOhm verwenden.

Und beim Einschalten müsster der uC zum Laden des Elkos ein viel zu 
hoher Strompeek liefern, du solltest noch etwas 330 Ohm in Serie zur 
Diode schalten, wenn Du nicht möchtest dass der uC-Ausgang schon früh 
kaputt geht.

Mein Vorschlag wäre, dass Du den Elko und die Diode weglässt und die 
Helligkeit per Software (PWM) steuerst, wenn Du schon ein uC hast! Dann 
kannst Du Ein- und Ausschaltgeschwindigkeit per SW steuern und sogar 
während dem Betrieb variieren...

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja ich weiß, dass ein softpwm die elegantere Lösung wäre. Ist aber 
leider für mich zu schwer zum programmieren :(

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur Mut, PWM kriegst Du schon hin, da kannst Du auch gleich etwas 
dazulernen.

Hier im Forum findest Du bestimmt Beispiele oder Leute, die Dir mit 
Programmbeispielen helfen können.

Was für einen uC verwendest Du? Welche Programiersprache? was hast Du 
bisher schon programiert..?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Anbei ein Beispiel für SW-PWM.

main.h:
//----------------------------------------------------------------------
//main.h : main header file for the project
//----------------------------------------------------------------------

#ifndef _MAIN_H_
#define _MAIN_H_

// GCC specific
#include <stdlib.h>
#include <stdint.h>

// AVR-LibC specific
#include <avr/io.h>
#include <inttypes.h>
#include <util/delay.h>

//======================================================================
// Definition of types
//----------------------------------------------------------------------
typedef signed char        s08;
typedef signed int         s16;
typedef signed long        s32;
typedef signed long long   s64;
typedef unsigned char      u08;
typedef unsigned int       u16;
typedef unsigned long      u32;
typedef unsigned long long u64;

//======================================================================
// Various defines
//----------------------------------------------------------------------
#define OFF     0    // Output Low-Level
#define ON      1    // Output High-Level

//======================================================================
// Definition for I/O-Pin control
//----------------------------------------------------------------------
#define PIN_0   0x01  // IO-Pin(0)
#define PIN_1   0x02  // IO-Pin(1)
#define PIN_2   0x04  // IO-Pin(2)
#define PIN_3   0x08  // IO-Pin(3)
#define PIN_4   0x10  // IO-Pin(4)
#define PIN_5   0x20  // IO-Pin(5)
#define PIN_6   0x40  // IO-Pin(6)
#define PIN_7   0x80  // IO-Pin(7)

#define PORT_A  &PORTA, &DDRA, &PINA
#define PORT_B  &PORTB, &DDRB, &PINB
#define PORT_C  &PORTC, &DDRC, &PINC
#define PORT_D  &PORTD, &DDRD, &PIND
#define PORT_E  &PORTE, &DDRE, &PINE
#define PORT_F  &PORTF, &DDRF, &PINF
#define PORT_G  &PORTG, &DDRG, &PING

#endif //_MAIN_H_



main.c:
#include "main.h"

#define LED1    PORT_B, PIN_7

void pwm_fade(volatile u08 *PORT, volatile u08 *DDR, volatile u08 *PIN, u08 msk, u08 status, u16 time);

int main()
{
  while(1)                    // Endlos-Schlaufe
  {
    pwm_fade(LED1,ON,1000);   // LED1 einschalten, fading während 1000ms
    pwm_fade(LED1,OFF,500);   // LED1 ausschalten, fading während 5000ms
  }
}


void pwm_fade(volatile u08 *PORT, volatile u08 *DDR, volatile u08 *PIN, u08 msk, u08 status, u16 time)
{
  u08 t=0;
  u08 p=64;                        // 64 PWM-Steps
  time = (time+64) >> 7;           // (2 ms x 64 Steps) => time / 128
  *DDR  |=  msk;                   // Set IO-pin as output
  //--------------------------------------------------------------------
  // Fading from LOW to HIGH
  //--------------------------------------------------------------------
  if (status == ON)
  {
    while(p--)
    {
      t=(u08)time;
      while(t--)
      {
        *PORT &= ~msk;             // Set IO-pin Low
        for(u08 i=0; i<p; i++)
        {
          _delay_us(31);           // 2ms/64 Schritte = 31us
        }
        *PORT |=  msk;             // Set IO-pin High
        for(u08 i=p; i<64; i++)
        {
          _delay_us(31);           // 2ms/64 Schritte = 31us
        }
      }
    }
    *PORT |=  msk;                 // Set IO-pin High
  }
  //--------------------------------------------------------------------
  // Fading from HIGH to LOW
  //--------------------------------------------------------------------
  else if (status == OFF)
  {
    while(p--)
    {
      t=(u08)time;
      while(t--)
      {
        *PORT |=  msk;             // Set IO-pin High
        for(u08 i=0; i<p; i++)
        {
          _delay_us(31);           // 2ms/64 Schritte = 31us
        }
        *PORT &= ~msk;             // Set IO-pin Low
        for(u08 i=p; i<64; i++)
        {
          _delay_us(31);           // 2ms/64 Schritte = 31us
        }
      }
    }
    *PORT &= ~msk;                 // Set IO-pin Low
  }
  //--------------------------------------------------------------------
}



Ich weiss, dieses Beispiel ist nicht super Effizient und auch nicht 
sonderlich "schön", weil ohne Timer und Interrupt, aber für Anfänger 
interressant zum Einstieg...

Autor: (Gast) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PWM heißt ja nicht notwendigerweise soft-PWM...
Die meisten AVRs haben PWM eigebaut.

Autor: Joachim B. (jojo84)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

genau, PWM ist das Zauberwort. Peter hat oben zwar "in Software" 
geschrieben, damit meint er aber nur, daß du was programmieren sollst :) 
.
Der AVR hat nen eingabautes PWM-Modul, du braucht du kaum noch zu 
programmieren.
Und wenn das ein Showcar (und keine total spackige und alberne 
Proletenkutsche) werden soll, dann such doch mal nach "Moodlight". Dann 
kannst du deiner Beleuchtung noch ganz andere Effekte verpassen :) !

Gruß

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Die meisten AVRs haben PWM eigebaut.

Das stimmt, man ist dann aber an die spezifischen IO-Pins gebunden, die 
SW-PWM funktioniert mit jedem beliebeigen IO-Pin.

Aber zur Zeit kennen wir weder die HW-Schaltung (bzw. uC-Typ) noch die 
Programmiersprache die Matthias verwenden will.

Autor: Joachim B. (jojo84)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter schrieb:
> die
> SW-PWM funktioniert mit jedem beliebeigen IO-Pin.

Klaro, das stimmt. Aber aus dem, was der TO bisher gepostet hat (was ja 
noch nicht viel war) hab ich erstmal geschlossen, daß er etwas 
programmier-scheu ist. Da wäre die HW-Lösung vielleicht angenehmer.

BTW: so schrecklich fand ich die Rechtschreibung gar nicht. Da hab ich 
hier schon weitaus schlimmeres gesehen. Besonders haarstreubend: 
Verschreiber im Titel! Wenn ich schon "simmulieren" lese...

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.