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
> 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.
> 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)
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.
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 :(
> 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).
> 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.
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???
> 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...
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
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 (})
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.
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 ?
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);
}
}
//----------------------------------------------------------------------