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


von Matthias (Gast)


Angehängte Dateien:

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

von Michael H. (morph1)


Lesenswert?

Schnittlauch oder Bärlauch?

von Matthias (Gast)


Lesenswert?

HÄÄÄÄÄÄÄÄÄÄ was soll die antwort denn?

von ernie (Gast)


Lesenswert?

fieleicht meind der michael das du mahl meer auf deine rechtschreipung 
achden solltesd?!

von Matthias (Gast)


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!

von Peter (Gast)


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...

von Matthias (Gast)


Lesenswert?

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

von Peter (Gast)


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..?

von Peter (Gast)


Lesenswert?

Anbei ein Beispiel für SW-PWM.

main.h:
1
//----------------------------------------------------------------------
2
//main.h : main header file for the project
3
//----------------------------------------------------------------------
4
5
#ifndef _MAIN_H_
6
#define _MAIN_H_
7
8
// GCC specific
9
#include <stdlib.h>
10
#include <stdint.h>
11
12
// AVR-LibC specific
13
#include <avr/io.h>
14
#include <inttypes.h>
15
#include <util/delay.h>
16
17
//======================================================================
18
// Definition of types
19
//----------------------------------------------------------------------
20
typedef signed char        s08;
21
typedef signed int         s16;
22
typedef signed long        s32;
23
typedef signed long long   s64;
24
typedef unsigned char      u08;
25
typedef unsigned int       u16;
26
typedef unsigned long      u32;
27
typedef unsigned long long u64;
28
29
//======================================================================
30
// Various defines
31
//----------------------------------------------------------------------
32
#define OFF     0    // Output Low-Level
33
#define ON      1    // Output High-Level
34
35
//======================================================================
36
// Definition for I/O-Pin control
37
//----------------------------------------------------------------------
38
#define PIN_0   0x01  // IO-Pin(0)
39
#define PIN_1   0x02  // IO-Pin(1)
40
#define PIN_2   0x04  // IO-Pin(2)
41
#define PIN_3   0x08  // IO-Pin(3)
42
#define PIN_4   0x10  // IO-Pin(4)
43
#define PIN_5   0x20  // IO-Pin(5)
44
#define PIN_6   0x40  // IO-Pin(6)
45
#define PIN_7   0x80  // IO-Pin(7)
46
47
#define PORT_A  &PORTA, &DDRA, &PINA
48
#define PORT_B  &PORTB, &DDRB, &PINB
49
#define PORT_C  &PORTC, &DDRC, &PINC
50
#define PORT_D  &PORTD, &DDRD, &PIND
51
#define PORT_E  &PORTE, &DDRE, &PINE
52
#define PORT_F  &PORTF, &DDRF, &PINF
53
#define PORT_G  &PORTG, &DDRG, &PING
54
55
#endif //_MAIN_H_



main.c:
1
#include "main.h"
2
3
#define LED1    PORT_B, PIN_7
4
5
void pwm_fade(volatile u08 *PORT, volatile u08 *DDR, volatile u08 *PIN, u08 msk, u08 status, u16 time);
6
7
int main()
8
{
9
  while(1)                    // Endlos-Schlaufe
10
  {
11
    pwm_fade(LED1,ON,1000);   // LED1 einschalten, fading während 1000ms
12
    pwm_fade(LED1,OFF,500);   // LED1 ausschalten, fading während 5000ms
13
  }
14
}
15
16
17
void pwm_fade(volatile u08 *PORT, volatile u08 *DDR, volatile u08 *PIN, u08 msk, u08 status, u16 time)
18
{
19
  u08 t=0;
20
  u08 p=64;                        // 64 PWM-Steps
21
  time = (time+64) >> 7;           // (2 ms x 64 Steps) => time / 128
22
  *DDR  |=  msk;                   // Set IO-pin as output
23
  //--------------------------------------------------------------------
24
  // Fading from LOW to HIGH
25
  //--------------------------------------------------------------------
26
  if (status == ON)
27
  {
28
    while(p--)
29
    {
30
      t=(u08)time;
31
      while(t--)
32
      {
33
        *PORT &= ~msk;             // Set IO-pin Low
34
        for(u08 i=0; i<p; i++)
35
        {
36
          _delay_us(31);           // 2ms/64 Schritte = 31us
37
        }
38
        *PORT |=  msk;             // Set IO-pin High
39
        for(u08 i=p; i<64; i++)
40
        {
41
          _delay_us(31);           // 2ms/64 Schritte = 31us
42
        }
43
      }
44
    }
45
    *PORT |=  msk;                 // Set IO-pin High
46
  }
47
  //--------------------------------------------------------------------
48
  // Fading from HIGH to LOW
49
  //--------------------------------------------------------------------
50
  else if (status == OFF)
51
  {
52
    while(p--)
53
    {
54
      t=(u08)time;
55
      while(t--)
56
      {
57
        *PORT |=  msk;             // Set IO-pin High
58
        for(u08 i=0; i<p; i++)
59
        {
60
          _delay_us(31);           // 2ms/64 Schritte = 31us
61
        }
62
        *PORT &= ~msk;             // Set IO-pin Low
63
        for(u08 i=p; i<64; i++)
64
        {
65
          _delay_us(31);           // 2ms/64 Schritte = 31us
66
        }
67
      }
68
    }
69
    *PORT &= ~msk;                 // Set IO-pin Low
70
  }
71
  //--------------------------------------------------------------------
72
}



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...

von (Gast) (Gast)


Lesenswert?

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

von Joachim B. (jojo84)


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ß

von Peter (Gast)


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.

von Joachim B. (jojo84)


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...

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.