Forum: Mikrocontroller und Digitale Elektronik Countdown (Zähler)


von Nobody85 (Gast)


Lesenswert?

Hi Leute,
bin neu hier und wollte mich in diesem Sinne bei euch vorstellen 
natürlich direkt auch mit einer frage...
Also ich bin Anfänger ünd würde gerne einen Countdown-Zähler aus je 4 
7-seg. Anzeigen bauen (kein LCD-Display) habe zuhause eine Atmega8515 
rumfliegen und wollte ihn dafür nutzen auch wenn er dafür warscheinlich 
etwas zu überdimensioniert ist. Hatte auch mal gegooglet und habe ein 
Projekt einer Uhr gefunden. Habe den Schaltplan (siehe Anhang) nach 
gebaut und wollte lediglich den Code des µC ersetzen. Hab also meinen 
mit Bascom geschrieben und in dann mit PP auf den µC gebrannt ging super 
nur leider bleiben die seg. dunkel was hab ich falsch gemacht???

von Ronny F. (ronny)


Lesenswert?

> siehe Anhang

Wo ist der?

> Hab also meinen mit Bascom geschrieben und in dann mit PP auf den µC
> gebrannt ging super nur leider bleiben die seg. dunkel was hab ich falsch > 
gemacht???

Keine Ahnung,kenn mich mit Bascom leider nicht so aus. Wo war nochmal 
der Schaltplan? Zeig dochmal die Quellen, dann kann dir hier sicher 
jemand helfen.

von Michael N. (nobody85)


Angehängte Dateien:

Lesenswert?

Sorry das mit dem Anhang hat grade nicht geklappt...
hier der neue Versuch ;-)
Sowie die Page wo ich es gefunden hab 
http://blackstrom.derschwarz.de/avr/avr_uhr/index.shtml
In die Hauptschleife lautet bei mir:
Do                                                          'Start 
Hauptschleife


If Z1_sekunde = 0 And Z2_sekunde = 0 And Z1_minute = 0 And Z2_minute = 0 
Then

Portd.1 = 1                                                 'Pin wird 
auf High, also 5V geschaltet
Waitms 1000
Portd.1 = 0                                                 'Pin wird 
auf Low, also 0V geschaltet
Waitms 1000
Portd.1 = 1                                                 'Pin wird 
auf High, also 5V geschaltet
Waitms 1000
Portd.1 = 0                                                 'Pin wird 
auf Low, also 0V geschaltet
Waitms 1000

Else

If Z1_sekunde > 0 Then
 Z1_sekunde = Z1_sekunde - 1
 Else
 Z1_sekunde = 9

    If Z2_sekunde > 0 Then
    Z2_sekunde = Z2_sekunde - 1
    Else
    Z2_sekunde = 5

        If Z1_minute > 0 Then
        Z1_minute = Z1_minute - 1
        Else
        Z1_minute = 9

            If Z2_minute > 0 Then
            Z2_minute = Z2_minute - 1

            End If
        End If
    End If
 End If
End If
   Waitms 1000

' ### Uhr stellen ###
' Wird der Taster "T_min_stellen" betätigt werden die Minuten um eins 
erhöht.
' Wird der Taster "T_h_stellen" betätigt werden die Stunden um eins 
erhöht.
' Werden beide gleichzeitig betätigt werden Stunden und Minuten auf Null 
gesetzt.
' Wird einer der Taster länger betätigt (> 150ms) gibt es einen 
schnellvorlauf

If T_min_stellen = 0 Then                                   'Wird 
"T_min_stellen" betätigt
   Waitms 150                                               'Entprellen
   If T_min_stellen = 0 Then                                'Ist der 
Taster immer noch betätigt
   Incr Z1_minute                                           'wird Minute 
um eins erhöht
   Z1_sekunde = 0                                           'Sekunden 
auf Null setzen
   Z2_sekunde = 0
   End If
End If



If T_min_stellen = 0 And T_h_stellen = 0 Then               'Wenn 
"T_Min_stellen" und "T_H_stellen" gleichzeitig betätigt
    Z1_minute = 0                                           'dann werden 
Minuten und Stunden auf 0 gestzt
    Z2_minute = 0
    Z1_sekunde = 0
    Z2_sekunde = 0
End If


Loop                                                        'Ende 
Hauptschleife


End                                                         'Programm 
Ende


die Varieablen sind bei mir auch etwas anders wie man sied. Natürlich 
habe ich auch in der Deklaration des µC
$regfile = "m8515.dat"
$crystal = 4000000
eingegeben.
Über eure hilfe wär ich sehr dankbar da ich echt noch ein µC Neuling 
bin...

von crazy horse (Gast)


Lesenswert?

als erstes:
der Code ist kompletter Mist.
Nimm nen Timer und dessen Interrupt, um das Display anzusteuern (10ms 
Interrupt etwa), nebenbei ist das dein Zeitgeber für die Uhr.

Ansonsten seh ich keine keinerlei Ansteuerung des Displays - kein 
Wunder, wenn das nicht funktioniert:-)

von crazy horse (Gast)


Lesenswert?

und warum du D1 ein und ausschaltest, ist mir auch nicht klar.

von Michael N. (nobody85)


Angehängte Dateien:

Lesenswert?

Hi crazy horse,
also danke für deine Antwort aber glaube du hast mich nicht richtig 
verstanden....
1. ich möchte KEIN Display verwenden sondern insge. 4 * 7Seg.-Anzeigen
2. Das mit dem PortD1 soll bei 00:00 ein blinken erzeugen sprich wenn 
der Counter runtergelaufen ist soll eine LED blinken...
3. Ist warum ist mein code mist was hab ich falsch gemacht hast du 
vielleicht eine Idee???
Meine obige Schleife ist natürlich nur in verbindung mit dem auf 
blackstrom stehenden Code zubringen.
Aber im Anhang ist mein gesammter Code nochmal in na txt-Datei...

von Stefan B. (stefan) Benutzerseite


Lesenswert?

In dem Link oben und in deinem PDF sehe ich nur den Schaltplan für einen 
Aufbau mit einem anderen AVR. Es würde Sinn machen, wenn du exakt deinen 
Aufbau skizzieren würdest. No panic, das muss kein pikkobello 1a 
Schaltplan sein.

Mach auch Angaben zu den verwendeten Bauteilen insbesondere den 
7-Segmentanzeigen (PDF, Link oder wenigstens Teilebezeichnung und 
-nummer). Nach dem Originalplan sollen das Common-Anode Anzeigen sein, 
die ca. 20 mA pro Segment abkönnen.

Was hast du an Test- und Messmöglichkeiten? Multimeter für 
Spannungsmessungen an den Displays und Strommessungen durch die 
Transistoren? Low-Current-LED-Logik-Spion? LED-Tester für die Anzeigen?

Bis das Multiplexing für vier Anzeigen sicher arbeitet, würde ich erst 
mal nur mit einer Anzeige oder gar mit 1-4 Einzel-LEDs arbeiten. Nicht 
dass per Sourcecode mehrere Anzeigen gleichzeitig aktiv sind.

@  crazy horse

In dem nachträglich beigebrachten Code (counter.txt) sind zwei Timer 
Interrupts benutzt. Timer0 fürs Multiplexing und Timer1 für die 
Zeitbasis. Bascom wäre nicht meine erste Wahl, ich bin bekennender 
C-ler, der seit kurzem mit Python fremd geht, aber warum nicht...

Unabhängig von der Programmiersprache sieht man leider schlecht, was 
Originalcode (angenommen getestet und funktionsfähig) und was Änderungen 
von Michael (ungetestet und möglicherweise fehlerhaft) sind. Ich bemühe 
mich bei Änderungen den Originalcode als Kommentar o.ä. stehen zu 
lassen.

von Michael N. (nobody85)


Lesenswert?

Hallo Stefan
Schaltplan ist mit meinem identisch nur das ich den 8515 verwende also 
sprich ich habe die Anschlusspins verändert... z.B. RESET  , Ports usw.
Die Segmentanzeigen sind auch die die du erwändt hast (so wie bei 
blackstrom)

von Analog (Gast)


Lesenswert?

Der Punkt ist, daß man auch bei der Verdrahtung (z.B. Steckbrett) vertun 
kann. Solange Du keine exakte Beschreibung, also Schaltung oder 
Screeshot von Deinem Aufbau schickst, kann Dir wirklich niemand weiter 
helfen. Gruß

von Paulo M. (paulo)


Lesenswert?

Stefan "stefb" B. wrote:
> Low-Current-LED-Logik-Spion? LED-Tester für die Anzeigen?


Hallo,
wollte mal fragen was du mit "Low-Current-LED-Logik-Spion" meinst?

Danke

Gruß

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Die professionelle Version nennt sich Logiktester und ist dafür 
ausgelegt die zu untersuchende Schaltung möglichst wenig (gar nicht) zu 
stören/belasten, in dem z.B. ein sehr hoher Eingangswiderstand benutzt 
wird und die eigentliche Anzeige (LEDs an/aus) nicht aus der Schaltung 
gespeist wird. Spezialfeatures können z.B. einmalige, schnelle 
Pegelwechsel (Spikes) fangen und anzeigen.

Billiger Selbstbau der Einfachstversion z.B. für +5V wäre

                      ^^
                       
+)------###----|>--------------(-
         >1K5   Low-Current-LED

Bei + und - kann man Krokoklemmen oder eine Pieksnadel oder .... 
anbringen. Low-Current, weil man da bei geringen Strömen um 1 mA bereits 
was sieht (in der Bastelbude, nicht Draussen).

Das Ding kann man an Leitungen klemmen, bei denen man vermutet, dass ein 
HIGH Pegel anliegt. + an fragliche Leitung und - an GND. Wenn ja, sieht 
man das (wenn sich die Pegel nicht zu schnell ändern).

Kann man auch an Leitungen klemmen, bei denen man vermutet, dass ein LOW 
Pegel anliegt und ggf. dort angeschlossene ICs ca. 1-2 mA abkönnen. + an 
Vcc und - an fragliche Leitung. Wenn ja, sieht man das (wenn sich die 
Pegel nicht zu schnell ändern).

Man kann es auch an Leitungen klemmen, an denen man voraussetzt, dass 
Vcc dort anliegt. + an fragliche Leitung und - an GND. Wenn ja, sieht 
man das.

Und man kann es auch an Leitungen klemmen, an denen man voraussetzt, 
dass GND dort anliegt. + an Vcc und - an fragliche Leitung. Wenn ja 
sieht man das.

Das Umklemmen kann man sich sparen, wenn man zwei LEDs gegenpolig, 
parallel einbaut.

Bei anderen Spannungen (z.B. -12V beim spionieren an TX /RX von RS232) 
muss man den Vorwiderstand anpassen.

von Paulo M. (paulo)


Lesenswert?

Stefan "stefb" B. wrote:
> Die professionelle Version nennt sich Logiktester und ist dafür
> ausgelegt die zu untersuchende Schaltung möglichst wenig (gar nicht) zu
> stören/belasten, in dem z.B. ein sehr hoher Eingangswiderstand benutzt
> wird und die eigentliche Anzeige (LEDs an/aus) nicht aus der Schaltung
> gespeist wird. Spezialfeatures können z.B. einmalige, schnelle
> Pegelwechsel (Spikes) fangen und anzeigen.
>
> Billiger Selbstbau der Einfachstversion z.B. für +5V wäre
>
>                       ^^
>                       / /
> +)------###----|>--------------(-
>          >1K5   Low-Current-LED
>


Vielen Dank

Gruß Paulo

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.