Bascom multipleksowe sterowanie

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
pabisz
-
Posty: 18
Rejestracja: 14 sie 2005, 11:34
Lokalizacja: Bytom
Kontakt:

Bascom multipleksowe sterowanie

Post autor: pabisz » 19 gru 2005, 9:27

Witam, ostatnio postanowilem ze zrobie swoj pierwszy uklad elektroniczny zaprojektowany przeze mnie. Padlo na zwykly zegarek z sekundnikiem na mikroprocku AVR. Ponizej przedstawiam listing. Napisalem juz program ale nie wiem czy poprawnie (kompilator nie mial zastrzezen). Nie wiem czy moge uzyc dwa razy timera?

  • $regfile = "m8def.dat"
    $crystal = 8000000

    'konfiguracja portow

    Config Pinc.0 = Input
    Config Pinc.1 = Input
    Config Pinc.2 = Output
    Config Pinc.3 = Output
    Config Pinc.4 = Output
    Config Pinc.5 = Output
    Config Pinb.0 = Output
    Config Pinb.1 = Output
    Config Portd = Output

    'konfiguracja timerow

    Config Timer0 = Timer , Prescale = 256

    Config Timer1 = Timer , Prescale = 256

    On Timer0 Multi_vfd

    On Timer1 Odmierz_1s

    'zmienne

    Dim Sekundy As Byte
    Dim Sekundy1 As Byte
    Dim Minuty As Byte
    Dim Minuty1 As Byte
    Dim Godziny As Byte
    Dim Godziny1 As Byte
    Dim Nr_wysw As Byte

    'przypisanie aliasow

    S1 Alias Pinc.0
    S2 Alias Pinc.1
    W1 Alias Pinc.2
    W2 Alias Pinc.3
    W3 Alias Pinc.4
    W4 Alias Pinc.5
    W5 Alias Pinb.0
    W6 Alias Pinb.1

    Enable Interrupts
    Enable Timer1
    Counter1 = 34286
    Enable Timer0
    Load Timer0 , 125

    Set Pinc.0
    Set Pinc.1

    'glowna petla programu

    Do


    If S1 = 0 Then
    Waitms 25

    If S1 = 0 Then
    Incr Minuty
    Sekundy = 0
    Sekundy1 = 0

    If Minuty = 10 Then
    Minuty = 0
    Incr Minuty1

    If Minuty1 = 6 Then
    Minuty1 = 0
    End If

    End If

    End If

    End If

    If S2 = 0 Then
    Waitms 25

    If S1 = 0 Then
    Incr Godziny

    If Godziny = 10 Then
    Godziny = 0
    Incr Godziny1

    If Godziny1 = 2 And Godziny = 4 Then
    Godziny = 0
    Godziny1 = 0

    End If

    End If

    End If

    End If

    Loop

    End

    'koniec glownej petli programu

    Odmierz_1s:

    Counter1 = Counter1 + 34286

    Incr Sekundy

    If Sekundy = 10 Then
    Sekundy = 0
    Incr Sekundy1

    If Sekundy1 = 6 Then
    Sekundy1 = 0
    Incr Minuty

    If Minuty = 10 Then
    Minuty = 0
    Incr Minuty1

    If Minuty1 = 6 Then
    Minuty1 = 0
    Incr Godziny

    If Godziny = 10 Then
    Godziny = 0
    Incr Godziny1

    If Godziny1 = 2 And Godziny = 4 Then
    Godziny = 0
    Godziny1 = 0

    End If

    End If

    End If

    End If

    End If

    End If

    Return

    Multi_vfd:

    Load Timer0 , 125

    Set W1
    Set W2
    Set W3
    Set W4
    Set W5
    Set W6

    Select Case Nr_wysw

    Case 0:
    Portd = Lookup(godziny1 , Kody)

    Reset W1

    Case 1:
    Portd = Lookup(godziny , Kody)

    Reset W2

    Case 2:
    Portd = Lookup(minuty1 , Kody)

    Reset W3

    Case 3:
    Portd = Lookup(minuty , Kody)

    Reset W4

    Case 4:
    Portd = Lookup(sekundy1 , Kody)

    Reset W5

    Case 5:
    Portd = Lookup(sekundy , Kody)

    Reset W6

    End Select

    Incr Nr_wysw

    If Nr_wysw = 6 Then

    Nr_wysw = 0
    End If

    Return

    Kody:

    Data &B00111111 , &B00000110 , &B01011011 , &B01001111 , &B01100110,
    Data &B01101101 , &B01111101 , &B00000111 , &B01111111 , &B01101111

Rozbilem liczby minut godzin i sekund na dwie cyfry co mysle ulatwilo wyswietlanie ich. Czy program moze tak wygladac? Jesli tak to zaraz ładuje go do pamieci i zaczynam testowanie. Pozdrawiam

Awatar użytkownika
Koppel
Użytkownik
Posty: 500
Rejestracja: 24 lip 2005, 18:05
Lokalizacja: Gliwice

Post autor: Koppel » 19 gru 2005, 12:46

Rany... co to w ogóle za pytanie? Gdzie tkwi problem?... Może tak wyglądać. Załaduj go do proca, pobaw się nim. Jeśli program nie będzie działał spróbuj najpierw zapalić tylko jeden wyświetlacz. I rozwijaj go. Nie możesz przecież wysyłać pytania na forum po każdej zmianie. Aż mnie dziwi, że nie rozsadza Cię ciekawość i czekasz na odpowiedź. Ja bym chyba dawno wpisał program, coś bym popsuł a później zabrał się za czytanie (wybiórczo) instrukcji :wink:

Kapitan_Rzbik
-
Posty: 97
Rejestracja: 20 gru 2005, 10:52

Post autor: Kapitan_Rzbik » 20 gru 2005, 13:32

oj.. chłopak chciał sie pochwalić swoim pierwszym programem na mikrokontroler.. :D

tasza
Użytkownik
Posty: 1391
Rejestracja: 21 lut 2005, 15:02

Post autor: tasza » 20 gru 2005, 14:06

Kapitan_Rzbik pisze:chłopak chciał sie pochwalić swoim pierwszym programem na mikrokontroler
no, to ładny ten program, ładniutki... :)
najbardziej intryguje mnie nazwa jednej procedury: 'Multi_vfd', hmm... :roll:
tasza

ps.
wcięcia w listingu :!: :!:

pabisz
-
Posty: 18
Rejestracja: 14 sie 2005, 11:34
Lokalizacja: Bytom
Kontakt:

Post autor: pabisz » 20 gru 2005, 15:34

Witam wciecia w listingu sa tylko niestety nie wyswietlily sie w poscie. Procedurka nazywa sie multi_vfd bo bedzie to zegarek na vfd'ku dzieki oczywiscie artykulowi Taszy w jednym z EDW:). Pozdrawiam i odezwe sie jak cos ruszy, program mieszka juz w procku tylko nie mam odpowiedniego kwarcu musze jutro zakupic. Pozdrawiam

tasza
Użytkownik
Posty: 1391
Rejestracja: 21 lut 2005, 15:02

Post autor: tasza » 20 gru 2005, 16:55

pabisz pisze:bo bedzie to zegarek na vfd'ku dzieki oczywiscie artykulowi Taszy w jednym z EDW
no to miło, że się do czegoś przydał....
za wcięcia zwracam honor, jak są taby a nie spacje to tagi |code| tego nie widzą,
takie jakieś są....

heyka
-
Posty: 4
Rejestracja: 20 gru 2005, 21:21

Post autor: heyka » 20 gru 2005, 21:28

If S2 = 0 Then
Waitms 25

If S1 = 0 Then
Incr Godziny

powinno byc s2 a nie s1, a po kazdym takim podwijnym warunku dodaj jakąś zwłokę czasową bo jak nie to jak nacisniesz przycisk za szybko bedziesz przestawial cyferki, to tak na pierwszy rzut oka

pabisz
-
Posty: 18
Rejestracja: 14 sie 2005, 11:34
Lokalizacja: Bytom
Kontakt:

Post autor: pabisz » 21 gru 2005, 12:08

o, dzieki rzeczywiscie bład :) musze zmienic program w pamieci. Procka programowalem w szkole a teraz na stanie mam Willema i w nim nie ma niestety opcji programowania procka atmega8, wie ktos jakby to mimowszystko zrobic? mam do programatora adapter MCS 51 +

heyka
-
Posty: 4
Rejestracja: 20 gru 2005, 21:21

Post autor: heyka » 21 gru 2005, 19:34

robilem kiedys podobny zegarek i wiesz co, u mnie podwojny warunek typu

If godz_dz=2 and godz_jed=4 then


nie dzilal, musialem go zastapic dwoma ifami

if godz_dz=2 then
If godz_dz=4 then


warunwk ten nalezy oczywiscie wstawic w odpowiednich miejscach kodu

ODPOWIEDZ