logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Bascom początki programowania - problemy z programami.

Tomekddd 28 Sty 2009 18:11 2459 26
REKLAMA
  • #1 6067395
    Tomekddd
    Poziom 23  
    Witam wszystkich. Zaczynam programowanie w bascomie i mam już na starcie małe problemy.
    Mam książkę "programowanie mikrokontrolerów AVR w języku bascom" czytam właśnie temat o generowaniu sygnału PWM i pisze program z ksziążki listing 8.5. Zbudowałem sobie zestaw uruchomieniowy z2avr (taki jak w książce) wgrałem ten program a PWM nie działa nie wiem co jest nie tak.
    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Pinb.1 = Output
    Config Pinb.2 = Output
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Down , Prescale = 1
    Dim I As Byte
    Do
    For I = 0 To 255
    Pwm1a = I
    Pwm1b = I
    Waitms 4
    Next I
    For I = 255 To 0 Step -1
    Pwm1a = I
    Pwm1b = I
    Next I
    Loop
    End
    
    

    to jest kod do generowania PWM niestety diody nie działają nie wiem dlaczego, może ktoś to sprawdzić?

    Prosze moderatora o przyklejenie tematu żeby początkujący nie zakładali nowych tematów z niedziałającymi programami tylko zamieszczali opisy tutaj. Ja na pewno bede jeszcze pisał bo chyba na jednym problemie się nie skończy.
  • REKLAMA
  • #2 6067848
    sp3ots
    Poziom 38  
    Witam !
    Wgrałem ten program do M8 i działa.
    Może masz źle fuse bity inaczej ustawione ?
    Sprawdzałem na płycie z Ne 300-k
    Led podłączony przez rezystor do +5V.
    Pozdrawiam. Stefan amator GG6293398
  • #3 6067916
    dawid512
    Poziom 32  
    Spróbuj dać większe opóźnienie. Przestawiłeś fuse bity? Jak masz podłączone te diody? A może chcesz zapalić jakiś segment na wyświetlaczu led?
  • #4 6070714
    Tomekddd
    Poziom 23  
    Jak napisze prosty program do zaświecenia kilku ledów na porcie D to działa prawidłowo ale regulacja PWM na B1 i B2 nie działa. Fuse bity mam na 8MHz ale chyba wewnętzryny bo jak zewnętrzny kwarc odepne to diody działają poprawnie (w programie do odmierzania jednej sekundy)

    Dodano po 19 [sekundy]:

    A moze atmega jest uszkodzona?
  • REKLAMA
  • #5 6070856
    dawid512
    Poziom 32  
    Nie działa to znaczy że diody w ogóle się nie zapalają? Spróbuj zaświecić ledy na tych końcówkach bez PWM.
  • #6 6070865
    Tomekddd
    Poziom 23  
    napisalem programik do zmiany stanu na pinie portu B1 i B2 i te piny nie reaguja na programowanie B3 i reszta działają a te dwa nie
    $regfile = "m8def.dat"
    $crystal = 8000000
    Do
    Config Portb.2 = Output
    Toggle Portb.2
    Waitms 100
    Loop
    
    
    
    End


    Dodano po 35 [sekundy]:

    co to moze byc? uszkodzony port?
  • #7 6070884
    dawid512
    Poziom 32  
    Może je uszkodziłeś a jak masz podłączone te diody?
  • #8 6070929
    Tomekddd
    Poziom 23  
    przez rezystor do 5V i druga strona do portu B1 i B2
  • #9 6070969
    Freddy
    Poziom 43  
    A nie podłączyłeś przypadkiem odwrotnie diód ? (anoda katoda)
  • Pomocny post
    #10 6071066
    Kuczus
    Poziom 19  
    Sprawdź także połączenie procesora z podstawką( bo przypuszczam, że korzystasz z podstawki w zestawie uruchomieniowym) Weź miernik i sprawdź każdy pin procesora ma styk z płytką. Pozdrawiam.
  • #11 6071435
    Tomekddd
    Poziom 23  
    Kuczus napisał:
    Sprawdź także połączenie procesora z podstawką( bo przypuszczam, że korzystasz z podstawki w zestawie uruchomieniowym) Weź miernik i sprawdź każdy pin procesora ma styk z płytką. Pozdrawiam.


    BRAWOO zimny lut

    Dodano po 7 [minuty]:

    dzieki za pomoc
  • REKLAMA
  • #12 6358273
    Tomekddd
    Poziom 23  
    witajcie mam kolejny problem
    musze na jutro napisac program do atmegi 8 zeby po nacisnieciu 1 przycisku zmienial sekwencję zapalania ośmiu diod led a po nacisnieciu 2 przycisku uruchamiał stroboskop na ok 5 sekund, oraz na wyswietlaczach siedmiosegmentowych wyświetlał dowolne cyfry llub numer zapalonej sekwencji sterowania diodami

    bardzo prosze o szybkie odpowiedzi bo nie mam pojęcia jak to napisać
  • #13 6358417
    wader_669
    Poziom 28  
    hahaha chyba troche przesadzies
  • #14 6358496
    Tomekddd
    Poziom 23  
    dlaczego? atemga nie ruszy tzrech programów jednocześnie?? sekwencje zmiany cyfr na wyswietlaczu siedmiosegmentowym napisałem ale jak zrobić zeby stroba uruchamiało jak nacisne przycisk?
  • #15 6358596
    wader_669
    Poziom 28  
    Nie mowie, ze atmega tego nie ruszy. Tylko nawet nie udalo ci sie zrobic pwm, a chcesz zrobic troche bardziej zawansowany projekt.
    Radze ci kupic ksiazke, poczytac pare kursow i helpa.

    Dodano po 2 [minuty]:

    Tomekddd napisał:
    atemga nie ruszy tzrech programów jednocześnie??


    Nie, atmega nie posiada 3 rdzeni.
    Hahahahah
  • #16 6358614
    Tomekddd
    Poziom 23  
    książke mam i własnie się ucze

    a tu nizej jest program który napisałemżeby wyświetlał cyfry na wyświetlaczu i żeby po naciśnieciu przycisku włączał stroba ale niestety to włączanie stroba nie działa i nie moge tego uruchomić pewnie coś pomotałem a wyświetlanie cyfr działa

    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Portd = Output
    Config Pinc.6 = Input
    Config Pinc.5 = Output
    Guzik Alias Pinc.6
    Set Portc.6
    Declare Sub Wysw7seg(byval Cyfra As Byte)
    Dim I As Byte
    Dim Kod_cyf As Byte
    Kropka Alias Portd.7
    Do
    If Guzik = 0 Then
    Toggle Pinc.5
    Waitms 500
    Toggle Pinc.5
    Waitms 500
    End If
    Toggle Kropka
    For I = 0 To 9
    Call Wysw7seg(i)
    Wait 1
    Next I
    Loop
    End
    Sub Wysw7seg(byval Cyfra As Byte)
    If Cyfra < 10 Then
    Kod_cyf = Lookup(cyfra , Kody7seg)
    Kod_cyf.7 = Kropka
    Portd = Kod_cyf
    Else
    Portd = Portd And &B10000000
    End If
    End Sub
    Kody7seg:
    'kody cyfr
    Data &B1000000 , &B1111001 , &B00100100 , &B0110000 , &B0011001 , &B0010010 , &B0000010 , &B1111000 , &B0000000 , &B0010000
  • REKLAMA
  • #17 6358617
    wader_669
    Poziom 28  
    Jak posiadasz ksiazke to ja przeczytaj od poczatku do konca!!!!!!!!!!!!!!!!!

    
    if s1=0 then
    waitms 45
    if s1=0 then
    
    end if
    end if
    

    To jest w ksiazce i jest wytlumaczone dlaczego tak jest
  • #18 6358674
    Tomekddd
    Poziom 23  
    właśnie czytam o tej instrukcji if then i nie wiem czemu nie działa niby ma wykryć stan niski i kikla razy zmienić stan pinu c 5 a nie chce
    taki przykład był w książce na diodach ze jak nacisne to kierunek zmienia a ja to pzrerobiłem ze ma migac a nie miga
  • #19 6358684
    wader_669
    Poziom 28  
    poczytaj o przycikach, nie bez powodu jest waitms 45 i drugi raz sprawdza stan

    Dodano po 3 [minuty]:

    po 2 przanalizuj kod masz pod koniec wait 1.
    Wiec kod idzie tak:
    szybko sprawdza czy przycisk nie jest wcisniety
    pozniej idzie do petli for wykonuje ja w sumie 9 razy czyli zajmuje to 9 sekund
    i wraca na poczatek (czyli sprawdza czy przycisk jest wcisniety)
    tak w kolko.

    Nic dziwnego, ze kod ci nie dziala bo tak naprawde sprawdza czy przycisk nie jest wcisniety przez pare ms. Pozniej przez 9 sekund jest zajety czyms innym i nie sprawdza przycisku.
  • #20 6358725
    Tomekddd
    Poziom 23  
    aha rozumiem juz czytam o przyciskach i to waitms 45 to ma ominąć drgania styków
    w takim razie będe musiał czekać 9 sekund zeby sprawdziło przycisk to musze z przycisku zrezygnować bo to za długo a zrobie zeby np po przejsciu pętli for next zamigało strobem pare razy i od nowa pętle
  • #21 6358736
    wader_669
    Poziom 28  
    problem z przyciskiem mogl bys rozwiazac za pomoca timera (ktory by liczyl dokladnie czas) lub przerwania int0/1.
    Nie chce mi sie dokladnie tlumaczyc jak to dziala, ale napewno duzo info znajdziesz w necie
  • #22 6358739
    Tomekddd
    Poziom 23  
    mniejsza o przycisk wazne zeby strobe zamigało (wyzwalany pzrekaźnikiem) tylko teraz napisałem zeby zamigalo po pzrejsciu pętli a ono omija i nie miga



    udało sie i miga tylko jeszcze musze zrobić zeby po kazdej sekwencji błysków pinc.5 był wyłączony bo u mnie zostawia włączony da sie to jakoś napisac? inaczej sfajczy pzrekaźnik
    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Portd = Output
    Config Portc.5 = Output
    Declare Sub Wysw7seg(byval Cyfra As Byte)
    Dim I As Byte
    Dim S As Byte
    Dim Kod_cyf As Byte
    Kropka Alias Portd.7
    Do
    For S = 0 To 5
    Toggle Portc.5
    Waitms 200
    Next S
    Toggle Kropka
    For I = 0 To 9
    Call Wysw7seg(i)
    Wait 1
    Next I
    Loop
    End
    Sub Wysw7seg(byval Cyfra As Byte)
    If Cyfra < 10 Then
    Kod_cyf = Lookup(cyfra , Kody7seg)
    Kod_cyf.7 = Kropka
    Portd = Kod_cyf
    Else
    Portd = Portd And &B10000000
    End If
    End Sub
    Kody7seg:
    'kody cyfr
    Data &B1000000 , &B1111001 , &B00100100 , &B0110000 , &B0011001 , &B0010010 , &B0000010 , &B1111000 , &B0000000 , &B0010000
  • #23 6358756
    wader_669
    Poziom 28  
    no ale zwroc uwage!!!!!!!!! Przesadzasz troche nawet sie nie wysilasz. Sprawdz kod 2 razy!!!!!

    brakuje konfiguracji portow
  • #24 6358764
    Tomekddd
    Poziom 23  
    wiem kapnąłem sie jak dodałem post i miga tylko jak zrobić zeby po miganiu wyłączało pinc.5? czyli na zero
    aktualny kod
    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Portd = Output
    Config Portc.5 = Output
    Declare Sub Wysw7seg(byval Cyfra As Byte)
    Dim I As Byte
    Dim S As Byte
    Dim Kod_cyf As Byte
    Kropka Alias Portd.7
    Do
    For S = 0 To 5
    Toggle Portc.5
    Waitms 200
    Next S
    Toggle Kropka
    For I = 0 To 9
    Call Wysw7seg(i)
    Wait 1
    Next I
    Loop
    End
    Sub Wysw7seg(byval Cyfra As Byte)
    If Cyfra < 10 Then
    Kod_cyf = Lookup(cyfra , Kody7seg)
    Kod_cyf.7 = Kropka
    Portd = Kod_cyf
    Else
    Portd = Portd And &B0111111
    End If
    End Sub
    Kody7seg:
    'kody cyfr
    Data &B1000000 , &B1111001 , &B00100100 , &B0110000 , &B0011001 , &B0010010 , &B0000010 , &B1111000 , &B0000000 , &B0010000
  • Pomocny post
    #25 6358779
    wader_669
    Poziom 28  
    Przesadzasz!!!!! Sam sie dowiedz. Ja juz nie pomagam.
  • #26 6358795
    Tomekddd
    Poziom 23  
    zmiana liczby mignięć nie wygasza (zmiana na nie parzystą) help na jutro musze mieć kod do szkoły

    Dodano po 3 [minuty]:

    a da sie ustawić zeby na starcie pin c5 miał stan wysoki ? wtedy po odpowiedniej liczbie mignięć będzie niski
    np
    wysoki-niski-wysoki-niski
    ale jak na sztywno stan inu ustawić?

    Dodano po 3 [minuty]:

    BINGO USTAWILEM
  • #27 6359115
    zumek
    Poziom 39  
    Tomekddd napisał:
    BRAWOO zimny lut

    I jak to się ma do tytułu "Bascom początki programowania - problemy z programami." :?:

    Temat zamykam.
REKLAMA