Forum: Mikrocontroller und Digitale Elektronik Lüftungssteuerung Mit ATmega 5 Schaltzustände + anzeige


von Harry (Gast)


Lesenswert?

hallo

Ich kenne mich mit der Programmierung von Microcontrollern leider noch 
nicht wirklich aus deshalb bitte ich hier um eure hilfe.

meine Fragen

1.
Ist es Möglich mit einem Atmega 8 über 2 taster (+ und -) 5 
schaltzustände über relays zu schalten 0,1,2,3,4 bei 0 eben kein relay 
geschalten.

2. Eine 7 Segment Anzeige um den status des Lüfters anzuzeigen 0,1,2,3,4 
zu diesem thema habe ich hier im forum schon diese seite gefunden

http://www.mikrocontroller.net/articles/AVR-Tutorial:_7-Segment-Anzeige

ich bedanke mich schon recht herzlich für antworten von euch

LG Harry

von Harry (Gast)


Lesenswert?

ich vergass zu erwähnen das je stufe ein relay geschaltet wird und das 
andere abgeschaltet werden muss

von NoProblemo (Gast)


Lesenswert?

klar ist das mit einem ATmega8 möglich

von MaWin (Gast)


Lesenswert?

> Ist es Möglich

Natürlich.

Das geht auch mit einem normalen IC:

   CD40110

Allerdings müssten an die Eingänge ENTPRELLTE Taster,
falls es also um keine elektronischen Taster geht
sollte man Taster mit Umschaltkontakt verwenden wie
DigiTast,

und die Ausgänge müssten für die Relais decodiert werden.

Da man aber auch beim AVR einen Transistor braucht um ein
Relais mit ausreichend Strom schalten zu können, und bei
4 Relais dazu ein integrierter Treiber wie ULN2003
nützlich wäre, kann man auch einen L293 nehmen und ihn an
die Segmente a, c, f, g anschliessen und die Relais mit
Dioden dazwischenschalten:
Relais1 mit Freilaufdiode und Diode in Leitrichtung von c nach g
Relais2 mit Freilaufdiode und Diode in Leitrichtung von g nach c
Relais3 ... von a nach f, Relais4 ... von f nach a.

Bleibt die Frage, wie man 5 verhindert: Der Taster up darf
wenn Relais4 aktiv ist nicht mehr betätigt werden können,
z.B. in dem er durch das Relais unterbroochen ist, oder die
5, bei der Ausgang b low ist, führt zu einem RESET.
Schwieriger ist es bei down den Übergang von 0 auf 9 zu
verhindern, weil 0 kein Relais hat, es gibt aber einen
BORROW-Impuls den man zu RESET umwandeln könnte. Ein
zusätzliches IC wäre nützlich, ein Schmitt-Trigger wie
CD4093 kann auch gleich normale Taster mit entprellen.

RESET erlaubt es, den Zähler beim Einschalten auf 0 zu stellen
in ein eine Widerstand (so 100k) nach Masse und ein Kondensator
(so 100nF) nach + geschaltet wird.

von Etrick (Gast)


Lesenswert?

Wenn Du deine Anforderungen leicht modifizierst (Folge nur in einer 
Richtung durchlaufen und Einzel-LEDs) reicht ein CD4017 für 20 Cent.

Gruß

Achim

von Karl H. (kbuchegg)


Lesenswert?

MaWin schrieb:
>> Ist es Möglich
>
> Natürlich.
>
> Das geht auch mit einem normalen IC:
>
>    CD40110

der macht die 7-Seg Anzeige mit?

von moep (Gast)


Lesenswert?

> 1.
> Ist es Möglich mit einem Atmega 8 über 2 taster (+ und -) 5
> schaltzustände über relays zu schalten 0,1,2,3,4 bei 0 eben kein relay
> geschalten.

> 2. Eine 7 Segment Anzeige um den status des Lüfters anzuzeigen 0,1,2,3,4
> zu diesem thema habe ich hier im forum schon diese seite gefunden

Da er vom "Status des Lüfters" und einer "Lüftersteuerung mit 5 
Schaltzuständen" spricht klingt das für mich fast so als wolle er 
einen Lüfter regeln der dann mit 5 Geschwindigkeitsstufen angefahren 
werden kann.

Dazu folgendes:

> ich vergass zu erwähnen das je stufe ein relay geschaltet wird und das
> andere abgeschaltet werden muss

Klingt für mich alles in allem fast so als wolltest du an den µC 5 
Relais hängen, diese parallel an den Lüfter und je nach Stufe den Lüfter 
mit unterschiedlichen Vorwiderständen ansteuern.

Das wäre alles in allem so in etwa die umständlichste Lüftersteuerung 
die ich je gesehen habe :D

Entschuldige falls es nicht so ist, falls doch:
Der AVR kann den Lüfter auch selbst regeln - Stichwort: 
Pulsweitenmodulation (PWM)

von Karl H. (kbuchegg)


Lesenswert?

moep schrieb:

> Das wäre alles in allem so in etwa die umständlichste Lüftersteuerung
> die ich je gesehen habe :D

Zumindest wäre ein einfacher Stufenschalter (eingestellt auf 5 
Stellungen) um einiges einfacher.

von Harry (Gast)


Lesenswert?

Sorry hab mich etwas undeutlich ausgedrückt ... moep hat es richtig 
erkannt es geht um das Gebläse in meinem auto da ich mir da einen Car PC 
eingebaut habe musste ich die gesamte Front neu machen deswegen passen 
die 3 Lüftungs drehschalter nicht mehr rein sondern nur noch 2... das 
Gebläse hat eine vorsicherung vom Gebläse ist eine 30A Sicherung somit 
ist da leider nichts mit PWM...

Die Relais sollen den Lüfter Schalten der mit vorwiederständen Arbeitet 
und hat 4 Stufen + Aus Die anzeige soll die Aktuelle Stufe anzeigen und 
die soll mit den tasten + und - geschallten werden... bekomme das aber 
garnicht hin :(

von moep (Gast)


Lesenswert?

> bekomme das aber garnicht hin :(

Woran scheitert es denn?
Software oder Hardware?
Ein paar Relais schalten und eine 7-Segment-Anzeige ansteuern sollte zu 
schaffen sein ;)

Aber du kannst ja mal posten was du schon so hast und dann sehen wir 
weiter.
Hast du denn ein kleines Entwicklungsboard zum testen oder ähnliches?

Größeres Sorgen würde ich mir um die Fein-Ausarbeitung machen.
Im Auto z.B. die Spannungsversorgung des µCs (wobei du die Schaltung 
vielleicht aus deinem M2-ATX oder was auch immer du für ein Netzteil für 
den CarPC verbaut hast versorgen kannst).

von MaWin (Gast)


Lesenswert?

> der macht die 7-Seg Anzeige mit?

Lies doch einfach das Datenblatt.

> das Gebläse hat eine vorsicherung vom Gebläse ist
> eine 30A Sicherung somit ist da leider nichts mit PWM...

Wenn ein Gebläse dauernd eingeschaltet sein darf
(und das darf es, Stufe 4, das hält die Sicherung aus),
dann darf es auch einen Bruchteil der Zeit eingeschaltet
sein. Es wird dadurch nicht mehr Strom, sondern weniger.
Als geht PWM. Ist aber mit up/down taster und Anzeige
ncht einfacher. Allerdings brauchen up/down Taster mit
Anzeige eher mehr Platz als ein Drehschalter.

von Harry (Gast)


Lesenswert?

hi

Da ich jetzt erst anfange mich mit der Programmierung der µCs zu 
beschäftigen bin ich imgrunde noch bei 0 :(.

Ich habe mir ein myAVR Smart USB Programmer geholt.

Hängen tust eigentlich schon am anfang da ich ja Imgrunde einen Zähler 
brauche der mit 2 Eingängen jeweils auf und ab zählt diese werte dan 
vergleicht und den zugeordneten wert bei gleichheit am ausgang den auv 
Positiv schaltet .. Liege ich da richtig???

von MaWin (Gast)


Lesenswert?

> Hängen tust eigentlich schon am anfang

// Tasten an Bit 0 und 1 PORTD, Display an PORTB, Relais an Bit 2..5 
PORTD
#define UP (1<<0)
#define DOWN (1<<1)
int tasten,zuletzt,stand;
char segment[5]={0x3F,0x06,0x5B,0x4F,0xC6}; // 01234 7 Segment
void main(void)
{
  DDRB=0x7F; DDRD=0x3C;
  stand=0;
  tasten=zuletzt=PIND;
  while(1)
  {
     tasten=PIND;
     if((tasten&UP)&&!(zuletzt&UP)&&stand<4) stand++;
     if((tasten&DOWN)&&!(zuletzt&DOWN)&&stand>0) stand--;
     zuletzt=tasten;
     PORTD=4<<stand; PORTB=segment[stand];
     delayms(10);
  }
}

Das war's schon mit dem Programm, Anzeige und Entprellen.
Nun musst du's nur noch verstehen...

von Winfried J. (Firma: Nisch-Aufzüge) (winne) Benutzerseite


Lesenswert?

Karl Heinz Buchegger schrieb:
> MaWin schrieb:
>>> Ist es Möglich
>>
>> Natürlich.
>>
>> Das geht auch mit einem normalen IC:
>>
>>    CD40110
>
> der macht die 7-Seg Anzeige mit?

Leicht, mit einer Tüte Dioden und 7 Widerständen

MfG Winne

von Harry (Gast)


Lesenswert?

hi

Vielen dank schonmal für diese grosse hilfe.

Ich habe jetzt versucht das programm einzugeben aber troz das ich hin 
und her versuche bringt das Programm mir beim versuch zu Compillieren 
immer wieder Fehler von denen ich keine ahnung habe warum Unteranderem 
den abschluss des Programms (})

von MaWin (Gast)


Lesenswert?

Weil es für keinen bestimmten Prozessor geschrieben ist, es weiß ja kein 
Schwein welchen du dir vorstellst, und weil es ggf. das Drumherum 
benötigt welches auch Beispielprogramme benötigen.
Kompiliere also für deinen Prozessor erst mal ein möglichst passendes 
Beispielprogramm und füge dann an passender Stelle diesen Code ein. Es 
zeigt dir selbst nur ein Beispiel wie es gehen kann, den realen Fall 
musst du dir selbst zusammenstricken.

von Hary X. (hary252)


Angehängte Dateien:

Lesenswert?

hi

Ich bekomme es irgendwie nicht hin hab ein Beispielprogramm geladen und 
das jetzt umgeändert ( siehe Bild ) Der Prozessor ist ein ATmega8-16PU 
im DIP Gehäuse... was am Programm funkt dazwischen ?

von MaWin (Gast)


Lesenswert?

Die Funktion delayms fehlt dir
http://paul.graysonfamily.org/thoughts/avrlinux/

von Harry (Gast)


Lesenswert?

Hallo

Vielen Dank Für deine Hilfe ich habe es jetzt nach langem versuchen 
hinbekommen nur noch eine Sache hab ich die ich nicht richtig verstehe 
wenn ich die Spannung Anlege Startet der Controller Bei 4 Wo kann ich 
das Ändern? ggf mit welcher Adresse ?



//----------------------------------------------------------------------
#define   F_CPU 3686400  // Taktfrequenz des myAVR-Boards
#include  <avr\io.h>    // AVR Register und Konstantendefinitionen
#define UP (1<<0)
#define DOWN (1<<1)
#include <avr/delay.h>
//----------------------------------------------------------------------
int tasten,zuletzt,stand;
char segment[5]={0x66,0x4F,0x5B,0x06,0x3F}; // 01234 7 Segment
//----------------------------------------------------------------------

main(void)
{
  DDRB=0x7F; DDRD=0x3C;
  stand=0;
  tasten=zuletzt=PIND;
  while(1)
  {
    tasten=PIND;
    if((tasten&UP)&&!(zuletzt&UP)&&stand<4) stand++;
    if((tasten&DOWN)&&!(zuletzt&DOWN)&&stand>0) stand--;
    zuletzt=tasten;
    PORTD=4<<stand; PORTB=segment[stand];
    _delay_ms(10);
  }
}
//----------------------------------------------------------------------

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.