Simpler einstelliger 7segmentanzeigen Counter

Im Unterforum Projekte im Selbstbau - Beschreibung: Selbstbau von Elektronik und Elektro

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 28 11 2024  17:45:33      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Projekte im Selbstbau        Projekte im Selbstbau : Selbstbau von Elektronik und Elektro

Gehe zu Seite ( Vorherige Seite 1 | 2 | 3 Nächste Seite )      


Autor
Simpler einstelliger 7segmentanzeigen Counter

    







BID = 847243

Offroad GTI

Urgestein



Beiträge: 12742
Wohnort: Cottbus
 

  


...vielleicht sollte ich auch noch mal meinen Quellcode posten...

Verbesserungsvorschläge sind stets willkommen.


Code :



#include <avr/io.h>
#define F_CPU 4e6
#include <util/delay.h>

#define Modul1 PORTD, PORTD2
#define Modul2 PORTD, PORTD1


#define setbit(IO) __setbit(IO)
#define __setbit(PORT, BIT) PORT |= (1<<BIT)

#define clearbit(IO) __clearbit(IO)
#define __clearbit(PORT, BIT) PORT &=~ (1<<BIT)

#define debounce( port, pin ) \
({ \
static uint8_t flag = 0; /* new variable on every macro usage */ \
uint8_t i = 0; \
\
if( flag ){ /* check for key release: */ \
for(;;){ /* loop ... */ \
if( !(port & 1<<pin) ){ /* ... until key pressed or ... */ \
i = 0; /* 0 = bounce */ \
break; \
} \
_delay_us( 20 ); /* * 256 = 25ms */ \
if( --i == 0 ){ /* ... until key >25ms released */ \
flag = 0; /* clear press flag */ \
i = 0; /* 0 = key release debounced */ \
break; \
} \
} \
}else{ /* else check for key press: */ \
for(;;){ /* loop ... */ \
if( (port & 1<<pin) ){ /* ... until key released or ... */ \
i = 0; /* 0 = bounce */ \
break; \
} \
_delay_us( 20 ); /* * 256 = 25ms */ \
if( --i == 0 ){ /* ... until key >25ms pressed */ \
flag = 1; /* set press flag */ \
i = 1; /* 1 = key press debounced */ \
break; \
} \
} \
} \
i; /* return value of Macro */ \
})


volatile uint8_t zaehler[2];

//Initialisierung
void init( void )
{
DDRB = 0xFF; //Port B Ausgang
PORTB = 0b00000001; //Alle Pins HIGH
DDRD = 0b0000110; //Port D Pin6,5,4,3,0 Eingänge; Pin 2,1 Ausgänge
PORTD = 0b1111111; //Alle PullUp-Widerstände 6...3 ein; Ausgänge auf HIGH (PNP Transistoren aus)
}

//Ausgabemuster für 7Segment-Anzeige
void SiebenSegAnz(uint8_t a)
{
switch(a)
{
case 9: PORTB = 0b00110000; break;
case 8: PORTB = 0b00000000; break;
case 7: PORTB = 0b11110000; break;
case 6: PORTB = 0b00000110; break;
case 5: PORTB = 0b00100100; break;
case 4: PORTB = 0b00110010; break;
case 3: PORTB = 0b01100000; break;
case 2: PORTB = 0b01001000; break;
case 1: PORTB = 0b11110010; break;
case 0: PORTB = 0b10000000; break;
default: PORTB = 0b01111110;
}
}

int main(void)
{
init();

zaehler[0]=9;
zaehler[1]=9;

for(;;)
{
if( debounce( PIND, PD3 ) ) zaehler[0]++;
if( debounce( PIND, PD4 ) ) zaehler[0]--;
if( debounce( PIND, PD6 ) ) zaehler[1]++;
if( debounce( PIND, PD5 ) ) zaehler[1]--;

if((zaehler[0] < 1) || (zaehler[1] < 1)) //Rücksetzen erst möglich
{ //wenn ein Zähler auf Null
if( debounce( PIND, PD0 ) )
{
zaehler[0]=9;
zaehler[1]=9;
}
}

//Zähler 1
clearbit (Modul1); //Erstes Modul ein
SiebenSegAnz (zaehler[0]); //Wert von Zähler 1 ausgeben
_delay_ms(1); //Anzeige 1ms stehen lassen
setbit (Modul1); //Erstes Modus aus

//Zähler 2
clearbit (Modul2);
SiebenSegAnz (zaehler[1]);
_delay_ms(1);
setbit (Modul2);

}

}




_________________
Theoretisch gibt es zwischen Theorie und Praxis keinen Unterschied. Praktisch gibt es ihn aber.

BID = 847265

Offroad GTI

Urgestein



Beiträge: 12742
Wohnort: Cottbus

 

  

Wie ihr sicherlich schon gemerkt habt, stimmen die Pin-Zuordnungen im Programm nicht mit denen im Schaltplan überein.
Das liegt daran, dass ich den Schaltplan nachträglich gezeichnet, es auf dem Steckbrett zum Testen aber anders aufgebaut, habe. Und zwar so wie im Programm.
...ein falscher Kommentar ist auch noch drin...

Bis jetzt werden die Segmente direkt von der CPU angesteuert, was natürlich nicht so schön ist. Man sieht auch, dass die CPU überfordert ist. Denn immer wenn die Zähler in~/dekrementiert werden, werden die Anzeigen kurz dunkel.

Besser ist es, soviel habe ich schon herausgefunden, dies in eine Interrupt-Routine auszulagern - in diese Problematik muss ich mich aber erst mal einarbeiten...

...oder DonComi schreib schnell hin, wie das für dieses Programm aussehen muss



_________________
Theoretisch gibt es zwischen Theorie und Praxis keinen Unterschied. Praktisch gibt es ihn aber.

[ Diese Nachricht wurde geändert von: Offroad GTI am 10 Sep 2012 18:46 ]

BID = 847310

Lakko

Gerade angekommen


Beiträge: 9

Hi.
Ich danke für den tip mit den 100mm anzeigen, die kosten bei Conrad 20€.
Ich danke auch für deine Mühen die du für mich aufwendest.
Ich denke ich werde erst am Wochenende erst wieder dazu kommen weiter zu suchen bzw zu bestellen.
Du müsstest mir noch sagen wie hoch der "Obolus" für deine Programmierung und der Chip ist! Da ich davon ja noch weniger Ahnung habe als vom löten.

Danke und MfG.

BID = 847345

Offroad GTI

Urgestein



Beiträge: 12742
Wohnort: Cottbus


Zitat :
erst wieder dazu kommen weiter zu suchen bzw zu bestellen.
Du müsstest mir noch sagen wie hoch der "Obolus" für deine Programmierung und der Chip ist!
Siehe dazu meine PM.




_________________
Theoretisch gibt es zwischen Theorie und Praxis keinen Unterschied. Praktisch gibt es ihn aber.

BID = 847371

Offroad GTI

Urgestein



Beiträge: 12742
Wohnort: Cottbus

Bzgl. der Versorgungsspannung und der Vorwiderstände für die Anzeige:
Dies hängt genau von selbiger ab. Bei einer größe von 100mm benötigen sie meist zwischen 8V und 12V.
Um genaueres zu erfahren, müsste erst mal das Datenblatt konsultiert werden.
Wenn die Anzeige 8V benötigt, kann die Schaltung auch mit 12V Versorgt werden (bspw über einen 12V Akku). Benötigt sie jedoch schon 12V, reicht ein 12V Akku nicht mehr aus.

Die Vorwiderstände berechnen sich wie gehabt:
\fed\mixonR_V=(U_Versorgung-U_LED)/I_LED

_________________
Theoretisch gibt es zwischen Theorie und Praxis keinen Unterschied. Praktisch gibt es ihn aber.

BID = 847461

Lakko

Gerade angekommen


Beiträge: 9

Hallo.
Die 100mm 7segment LEDs haben eine Durchlass Spannung von 10v. Reicht es da die "Anlage" mit 12v zu betreiben? Wie Zb ein lipo Akku mit 3 Zellen(11,1v) oder ein 12v Blei Akku , es ist beides vorhanden. Oder muss ich mir doch Ehr ein 4 Zellen lipo (14,8v) zulegen?
Mfg

BID = 847462

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach


Zitat :
Durchlass Spannung von 10v. Reicht es da die "Anlage" mit 12v zu betreiben? Wie Zb ein lipo Akku mit 3 Zellen(11,1v)
12V werden reichen, aber 3 Li-Zellen nicht, da die 3,7V keinen Bestand haben, sondern sie bis auf etwa 3V/Zelle entladen werden.

Wie ist denn die Einsatzdauer und Häufigkeit, und wo soll das Gerät benutzt werden (Helligkeit)?
Poste außerdem mal eine Link auf das Datenblatt des ausgesuchten Displays.

BID = 847467

Lakko

Gerade angekommen


Beiträge: 9

Hi.
H denke es soll diese hier werden:
http://www.reichelt.de/index.html?;.....891d8
Ok dann werd ich den kleinen Blei Akku nutzen.
Die Anzeige wird alle 2-4 Wochen für je 6-8std benutzt. Es wird an einer überdachten Hauswand "hängen".

MfG und danke

BID = 847475

Offroad GTI

Urgestein



Beiträge: 12742
Wohnort: Cottbus

Jup, bei dieser Anzeige genügt ein 12V Akku.




_________________
Theoretisch gibt es zwischen Theorie und Praxis keinen Unterschied. Praktisch gibt es ihn aber.

BID = 847479

Lakko

Gerade angekommen


Beiträge: 9

Ok, also Strom hab ich dann. Wie sieht es mit den Schaltern aus? Reichen da billige Taster (Schließer) ?
Und der summer? Kann ich den ohne weiteres, also Verstärker oder so in die Schaltung einbauen? Ich habe noch einen rumliegen den ich nutzen möchte. Es konnte der hier sein (zumindest optisch)
http://www.reichelt.de/Alarmmelder/.....891d8

Danke und mfg

BID = 847486

Offroad GTI

Urgestein



Beiträge: 12742
Wohnort: Cottbus


Zitat :
Kann ich den ohne weiteres, also Verstärker oder so in die Schaltung einbauen?
Nein, darum habe ich schon einen Verstärker für dieses Teil vorgesehen (der achte Kanal des Transistorarrays ULN2803)



Zitat :
Reichen da billige Taster (Schließer) ?
Ja, hauptsache Schließer. Ich würde aber keine zu kleinen nehmen.


_________________
Theoretisch gibt es zwischen Theorie und Praxis keinen Unterschied. Praktisch gibt es ihn aber.

BID = 847487

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach


Zitat :
Ok dann werd ich den kleinen Blei Akku nutzen.
Oder einen abgenudelten Laptop Akku plus Spannungsregler, oder den vom Akkuschrauber.
Für 8 Stunden alle Segmente an, brauchst du ja nur 1,1Ah, und das sollten solche Akkus noch schaffen.

Der Vorteil der NiCd und NiMH-Akkus ist, dass sie eine konstante Spannung von 1,2V pro Zelle abgeben, während sich bei Bleiakkus die Spannnung zwischen 2,3V und 1,8V verändert und bei Li-Akkus etwa zwischen 4V und 3V.
Dadurch kann man bei den Ni-Akkus den Segmentstrom rein über die Wahl der Vorwiderstände einstellen, während man bei den anderen Typen stabilisierende Maßnahmen braucht.

P.S.:
Zitat :
darum habe ich schon einen Verstärker für dieses Teil vorgesehen (der achte Kanal des Transistorarrays ULN2803
Vorsicht mit den ULNs!
Selbst bei diesen geringen Strömen verursachen die Darlingtons darin eine Spannungsabfall von 0,7V, und wenn die Betriebsspannung knapp ist, kann das problematisch werden.


[ Diese Nachricht wurde geändert von: perl am 12 Sep 2012 13:38 ]

BID = 847492

Offroad GTI

Urgestein



Beiträge: 12742
Wohnort: Cottbus


Zitat :
Vorsicht mit den ULNs!
Selbst bei diesen geringen Strömen verursachen die Darlingtons darin eine Spannungsabfall von 0,7V
Ja, das haben sie leider. Aber bei knapp 8V für die LEDs der Anzeige, sagen wir mal 1V Spannungsabfall im ULN und nur noch 11V am Bleiakku, bleiben immer noch gut 2V übrig. Sollte also gerade reichen.



_________________
Theoretisch gibt es zwischen Theorie und Praxis keinen Unterschied. Praktisch gibt es ihn aber.

BID = 847519

Lakko

Gerade angekommen


Beiträge: 9

ok, danke , dann werde ich wohl auf 10st akkus der grösse AA ausweichen.

BID = 847932

Offroad GTI

Urgestein



Beiträge: 12742
Wohnort: Cottbus

Hier der überarbeitete Schaltplan mit ein paar Hinweisen zum Aufbauen/Löten:


_________________
Theoretisch gibt es zwischen Theorie und Praxis keinen Unterschied. Praktisch gibt es ihn aber.


Vorherige Seite       Nächste Seite
Gehe zu Seite ( Vorherige Seite 1 | 2 | 3 Nächste Seite )
Zurück zur Seite 0 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 19 Beiträge im Durchschnitt pro Tag       heute wurden bisher 8 Beiträge verfasst
© x sparkkelsputz        Besucher : 182419197   Heute : 3695    Gestern : 7490    Online : 341        28.11.2024    17:45
3 Besucher in den letzten 60 Sekunden        alle 20.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0460641384125