Elektroda.pl
Elektroda.pl
X
PCBway
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Atmega8, ściemniacz oświetlenia - problem

20 Sie 2007 20:15 5878 13
  • Poziom 22  
    Witam !

    Mam problem z sciemniaczem opartym o uC Atmega8, Kiedys napisalem program na '51 ale musze go teraz przerobic na AVR

    i wrzucic do Atmegi. Tak jak na '51 wszystko dzialalo idealnie to na Atmedze wogole, juz nie mam pomyslu co jest

    zle. Ponizej przedstawiam kod ktory dzialal bez problemu w '51:


    Code:
    $regfile = 89s8253.dat
    
    $crystal = 12000000

    Dim Czas As Word


    Config Timer0 = Timer , Mode = 1 , Gate = Internal
    On Timer0 Czas
    Enable Timer0

    On Int0 zero
    Set Tcon.0
    Enable Int0
    Enable Interrupts

    Czas = 59000    'min 56200; max 65000

    '56200 min
    '65000 max

    Counter0 = Czas


    Do
    'procedury zmniejszajace,zwiekszajace jasnosc
    Loop


    Czas:
    Counter0 = Czas
    P2.2 = 0
    $asm
    MOV R7, #20
    Et1:
    DJNZ R7,ET1
    $end Asm
    P2.2 = 1
    Return

    zero:
    Start Timer0
    Return


    Starajac sie go przeniesc na AVR powstalo cos takiego:




    Code:
    $regfile = "m48def.dat"
    
    $crystal = 1000000
    $baud = 4800

    Dim X As Word

    Config Pinb.2 = Output : Portb.2 = 1
    Config Pind.4 = Input : Portd.4 = 1
    Config Pinb.6 = Input : Portb.6 = 1

    Minus Alias Pinb.6
    Plus Alias Pind.4
    Lampa Alias Portb.2


    X = 59000


    Config Timer1 = Timer , Prescale = 1

    On Int0 Zero
    Enable Int0
    Config Int0 = Falling

    Enable Timer1
    Enable Interrupts
    Timer1 = X
    On Timer1 Czas
    Start Timer1


    Do
    If Plus = 0 Then
    X = X + 100
    Print X
    Waitms 255
    End If

    If Minus = 0 Then
    X = X - 100
    Print X
    Waitms 255
    End If
    Loop
    End


    Czas:
    Timer1 = X
    Stop Timer1

    Lampa = 0
    Waitus = 40
    Lampa = 1
    Return

    Zero:
    Start Timer1
    Return


    Detektor zera to nic innego jak maly transformator, mostek prostowniczy, i od + mostka idzie przewód przez opornik na baze tranzystora NPN, ktory zwiera pin INT0 Atmegi do masy. Sprawdzilem przebieg na tym pinie ma rowno 100Hz. Zarówka migota czasem bardzo mocno.
    Z portu Atmegi steruje optotriakiem MOC3021 a on steruje juz triakiem.

    Dołączam schemat jak wyglada detektor zera. Dzisiaj dopiero zaczolem z AVr'ami moze cos w kodzie do atmegi.

    pokrecilem ??

    Bede wdzieczny za pomoc !!

    Pozdrawiam
  • PCBway
  • Poziom 17  
    zmień sobie m48def.dat na m8def.dat.
    A ustawiłes Atmegę na zewnętrzny sygnał zegarowy
  • PCBway
  • Poziom 22  
    m48def.dat jest dobrze bo używam Atmegi48 a to chyba to samo co Atmega8 z niewielkimi roznicami ?

    Atmega idzie mi na wewnętrznym kwarcu 1MHz

    Sprawdzilem i na 1000% jest to problem programowy, sprzetowo uklad jest sprawny bo podpiolem stary procesor AT89S8252 na ktory byl napisany pierwszy program i ladnie idzie, a z atmegi juz nie bardzo.

    Dodano po 2 [godziny] 9 [minuty]:

    z tego co wywnioskowalem problem jest zawarty w pracy Timer'a 1 w AVR. Nie dziala on na tej zasadzie co w '51.
  • Poziom 10  
    a czy kolega darrrek byłby na tyle miły i wrzucił tu 89s8253.dat , bo nigdzie tego nie mogę znaleźć:(
  • Poziom 22  
    Ja też mam podobny problem. Jakiej wersji bascoma używasz? Te starsze mają problemy z przerwaniami, pewnie i też z timerem. W każdym razie ten sam program na attiny2313 chodzi ok a na atmedze nie.
  • Poziom 22  
    mnei juz idzie wszystko ok :) zarowka sie sciemnia do zera i rozswietla bez problemow :) za pomoca tego regulowalem predkosc silnika z pralki.
    Bascom AVR mam w wersji 1.1.8.7

    Dodano po 6 [minuty]:

    jezeli jest ktos zainteresowany moge wyslac zrodelko ktore u mnie dziala bez problemu.
  • Poziom 22  
    Chętnie mu sie przyjrzę.
  • Poziom 22  
    jutro wstawie , przepraszam ale kompletnie nie mam czasu
  • Poziom 16  
    Przyłączam się do grona chętnych na.............."źródełko" :D
  • Poziom 22  
    Wykonałem układ rozjaśniacza żarówki bo taki akurat potrzebuję, miękki start dla drogiej żarówki. Program to zwykły PWM z atmegi z izolacją optyczną i triakiem. Tylko z rozpędu zapomniałem o detekcji zera o czym przypomniałem sobie gdy żarówka dziwnie migotała na gotowym już projekcie. Mam wolne wyprowadzenia na pcb więc detekcję zera już dorobiłem ale nie bardzo wiem jak dalej ma odbywać sie sterowanie w powiązaniu z detekcją zera. Proszę niech ktoś mnie naprowadzi na dobry trop a ja postaram sie stworzyć resztę programu.
  • Poziom 32  
    Po detekcji zera odczekujesz czas w ktorym zarówka bedzie wyłaczona potem właczasz zarówkę. Jezeli zaraz po detekcji właczysz zarówke bedzie swiecic pelną jasnoscia. Jezli odczekasz połowe czasu miedzy "zerami" to zarówka bedzi eswiecie połową jasnosci. Zwróc uwage ze masz do czynienia z sinusoidą wiec dobrze jest aby wartosci były nieliniowe jezeli chcemy miec liniową zmiane jasności.