Fragen zur Software

Basteleien analog und digital mit Strom und Spannung.

Moderator: radioscout

Benutzeravatar
upigors
Geowizard
Beiträge: 2342
Registriert: Mo 24. Sep 2007, 15:52
Wohnort: 39326 Hohenwarsleben
Kontaktdaten:

Re: Fragen zur Software

Beitrag von upigors » Mo 22. Okt 2012, 12:29

ein eigentlich recht simples ding aber ich bekomme graue haare. keine idee mehr wo ich ansetzen muss. hier erstmal der m.E. relevante Teil vom Code:

Code: Alles auswählen

Dim A As Byte
Dim B As Byte
Dim Z As Byte                                               'Variablen definieren
Z = 0                                                       'zähler auf Null

Do

Wdtcsr = &B11010011
Reset Watchdog
Powerdown

      If Pina.2 = 1 Then
      Gosub X
      Else
      End If
Loop

X:
Z = Z + 1
Wdtcsr = &B11010110

If Z = 0 Then Return                     'kann ja eigentlich nicht sein aber stört wohl auch nicht
If Z = 1 Then Gosub P1
If Z = 2 Then Gosub P2
If Z = 3 Then Gosub P3
If Z = 4 Then Gosub P4
If Z = 5 Then Gosub P5
If Z = 6 Then Gosub P6
If Z = 7 Then Gosub P7
If Z = 8 Then Gosub P8
If Z = 9 Then Gosub P9
If Z = 10 Then Gosub P10
If Z = 11 Then Gosub P11
If Z = 12 Then Gosub P12
If Z = 13 Then Gosub P13
If Z = 14 Then Gosub P14
If Z = 15 Then Gosub P15
If Z = 16 Then Gosub P16
If Z = 17 Then Gosub P17
If Z = 18 Then Gosub P18

If Z = 19 Then Gosub P0

Wdtcsr = &B11110000
Portb = &B00000000
Porta = &B00000000
For B = 1 To 2
Reset Watchdog
Powerdown
Reset Watchdog
Powerdown
Next B
Wdtcsr = &B11010110

Return

P0:

Z = 0                                                        'zähler auf null
Portb = &B00000000
Porta = &B00000000
Reset Watchdog
Powerdown
Return

P1:

Portb = &B00000111                                          '4
Porta = &B00001000
Reset Watchdog
Powerdown
Portb = &B00000111                                          '8
Porta = &B10001011
Reset Watchdog
Powerdown
Portb = &B00000110                                          '3
Porta = &B00001011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Reset Watchdog
Powerdown

Return

P2:

Portb = &B00000010                                          '2
Porta = &B10001011
Reset Watchdog
Powerdown
Portb = &B00000111                                          '5
Porta = &B00000011
Reset Watchdog
Powerdown
Portb = &B00000100                                          '7
Porta = &B00001001
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Reset Watchdog
Powerdown

Return

P3:

Portb = &B00000110                                          '3
Porta = &B00001011
Reset Watchdog
Powerdown
Portb = &B00000111                                          '6
Porta = &B10000011
Reset Watchdog
Powerdown
Portb = &B00000010                                          '2
Porta = &B10001011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Reset Watchdog
Powerdown

Return

P4:

Portb = &B00000110                                          '3
Porta = &B00001011
Reset Watchdog
Powerdown
Portb = &B00000010                                          '2
Porta = &B10001011
Reset Watchdog
Powerdown
Portb = &B00000111                                          '9
Porta = &B00001011
Reset Watchdog
Powerdown
Portb = 0
Porta = 0
Reset Watchdog
Powerdown

Return

P5:

...................................das geht jetzt bis 18 so weiter.........................................
was soll passieren? Bei jedem Tasten soll der Zähler einen weiter springen und so nacheinander alle 19 Dreierzahlenblöcke anzeigen, zwischendurch mit "Zwangspause". Danach Zähler wieder auf Null und von Vorn der Spaß.
Was passiert? Die ersten beiden 3er Blöcke ( 483, 257) werden angezeigt, der 3. (362) auch noch und dann wieder der erste (482) ohne pause ect.... und das ganze immer im kreis. Die Tasterabfrage ist also ok und auch Am Anfang tut das Programm was es soll aber dann.... Als ob es abbricht/abstürzt/resetet.....
Kann mal jemand drüber schauen? Mir sind die Ideen vor 2h ausgegangen. Hab schon zusätzlichen Schnickschnack wie die 3fache Widerholung der Zahlen raus genommen um es übersichtlich zu haben aber ich seh einfach das Problem nicht.
Bild..Bild

Werbung:
Benutzeravatar
upigors
Geowizard
Beiträge: 2342
Registriert: Mo 24. Sep 2007, 15:52
Wohnort: 39326 Hohenwarsleben
Kontaktdaten:

Re: Fragen zur Software

Beitrag von upigors » Mo 22. Okt 2012, 13:01

Selber gelöst....

Code: Alles auswählen

    
If Pina.2 = 1 Then
      Gosub X
      End If
so gehts, aber vielleicht hat noch jemand ne idee warum bzw. warum vorher nicht????

Edit: das wars wohl doch nicht, Problem trat wieder auf.... hätte mich auch gewundert.....
ABER ich hatte auf dem steckbrett die 7 segment anzeige ohne vorwiderstand an 3V. Anscheinend hat tatsächlich der controller sich immer genau an der stelle "abgeschaltet". seit da ein 50 ohm dazwischen ist geht es....
Bild..Bild

Benutzeravatar
Lion251
Geocacher
Beiträge: 48
Registriert: Sa 7. Aug 2010, 00:26

Re: Fragen zur Software

Beitrag von Lion251 » Di 23. Okt 2012, 11:38

Sind die Batterieleiter länger als ein paar cm?
Dann kann es passieren dass bei ein/ausschalten Peaks auf die Versorgungsspannung entstehen.
Vor allem, wenn mehrere LEDs ohne Vorwiderstand gleichzeitig schalten.
Ich hatte genaus dasselbe Problem.
Über die Versorgungsspannung (direkt an den Prozessorpins!) ein keramischer C von 100 nF, und parallel dazu 10-100 uF Alu-Elko. Ohne Elko kann es noch zu Schwingungen zwischen die Induktivität der Leitungen (bei mir 50 cm bis Labornetzteil) und keramischer C kommen.
Bei mir hat's so geholfen, aber ohne C's und kurze Batterieleitungen (<5 cm) ging auch.
Manchmal sind "Angstkondensatoren" doch nicht überflüssig!

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder