Skocz do zawartości
Zaloguj się, aby obserwować  
bb5

[ Bascom] ATMEGA32 PWM PROBLEM

Pomocna odpowiedź

Witam!

Mam problem z programem w BASCOM:

Ddrd = &B00111111
Portd = &B00011110

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 64
Start Timer1

I po takiej konfiguracji robię coś takiego:

Pwm1a = 255

I nie działa mi PWM. Co robię nie tak?

Udostępnij ten post


Link to post
Share on other sites

Wydaje mi się, że enable interrupts byłoby wskazane.

Udostępnij ten post


Link to post
Share on other sites

Do PWM'a nie trzeba enable interrupts. Spróbuj zmniejszyć prescaler na 1 (Prescale = 1).

Udostępnij ten post


Link to post
Share on other sites

Niestety ani jedno, ani drugie nie pomogło. Może w innym miejscu w kodzie jest coś nie tak?

Połączenia:

IMG_4bfebdcf99d9c8621.png

Kod

    $regfile = "m32def.dat"
  $crystal = 8000000

  Led1 Alias Portc.1
  Led2 Alias Portc.2
  S1 Alias Pinb.0
  S2 Alias Pinb.1
  S3 Alias Pinb.2
  Lp Alias Pinc.7
  Pp Alias Pinc.6
  Lt Alias Pinc.4
  Pt Alias Pinc.5
  A1 Alias Portd.0
  A2 Alias Portd.1
  B1 Alias Portd.2
  B2 Alias Portd.3
  Ena Alias Portd.4
  Enb Alias Portd.5

  Ddra = &B00000000
  Ddrd = &B00111111
  Ddrb = &B00000000
  Ddrc = &B00000110

  Portd = &B00011110
  Porta = &B00000000
  Portc = &B00000000
  Portb = &B11111111

  Declare Function Sharp_odczyt(byval Kanal As Byte) As Word
  Declare Sub Silniki_prz(byval Bieg As Byte)
  Declare Sub Silniki_tyl(byval Bieg As Byte)
  Declare Sub Silniki_l
  Declare Sub Silniki_r
  Declare Sub Silniki_stop
  Declare Sub Szukaj

  Config Adc = Single , Prescaler = Auto , Reference = Avcc
  Start Adc

  Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
  Start Timer1

  Dim Linia_lt As Byte 'Lt itd. oznacza lewy tylny
  Dim Linia_pt As Byte
  Dim Linia_pp As Byte 'Prawy przedni 
  Dim Linia_lp As Byte
  Dim Namierzony_sharp1 As Bit
  Dim Namierzony_sharp2 As Bit
  Dim Stan As Byte
  Dim Kolor As Bit

  Stan = 0
  Led1 = 1
  Wait 1
  Led1 = 0
  Bitwait S1 , Reset
  Kolor = 1
  Wait 5
  Led1 = 1

  Do

    'Obsługa dalmierzy Sharp

    If Sharp_odczyt(0) > 145 Then
    Call Silniki_prz(255)
    Else
    Call Szukaj
    End If

    If Sharp_odczyt(1) > 145 Then
    Call Silniki_tyl(255)
    Else
    Call Szukaj
    End If

    'Obsługa czujników lini CNY70

    If Lp = Kolor Then
    Linia_lp = 4
    Else
    Linia_lp = 0
    End If

    If Lt = Kolor Then
    Linia_lt = 8
    Else
    Linia_lt = 0
    End If

    If Pp = Kolor Then
    Linia_pp = 2
    Else
    Linia_pp = 0
    End If

    If Pt = Kolor Then
    Linia_pt = 1
    Else
    Linia_pt = 0
    End If

    'Przeliczenie odczytu czujników na wartość liczbową

    Stan = Stan + Linia_pt
    Stan = Stan + Linia_lt
    Stan = Stan + Linia_pp
    Stan = Stan + Linia_lp

    'Wybór reakcji robota według wskazań czujników

    Select Case Stan
     Case 0:
     Call Szukaj
     Case 1:
     Call Silniki_l
     Case 2:
     Call Silniki_r
     Case 3:
     Call Silniki_l
     Case 4:
     Call Silniki_l
     Case 6:
     Call Silniki_tyl(255)
     Case 8:
     Call Silniki_r
     Case 9:
     Call Silniki_prz(255)
     Case 12:
     Call Silniki_r
     Case 15:
     Call Silniki_stop
     Case Else:
     Call Szukaj
     End Select

Loop

  Sub Szukaj
     Call Silniki_r
     Wait 1
     Call Silniki_l
  End Sub

  Function Sharp_odczyt(byval Kanal As Byte) As Word
  Sharp_odczyt = Getadc(kanal)
  End Function

  Sub Silniki_prz(byval Bieg As Byte)
  A1 = 1
  A2 = 0
  B1 = 1
  B2 = 0
  Pwm1a = Bieg
  Pwm1b = Bieg
  End Sub

  Sub Silniki_tyl(byval Bieg As Byte)
  A1 = 0
  A2 = 1
  B1 = 0
  B2 = 1
  Pwm1a = Bieg
  Pwm1b = Bieg
  End Sub

  Sub Silniki_l
  A1 = 0
  A2 = 1
  B1 = 1
  B2 = 0
  Pwm1a = 128
  Pwm1b = 128
  End Sub

  Sub Silniki_r
  A1 = 1
  A2 = 0
  B1 = 0
  B2 = 1
  Pwm1a = 128
  Pwm1b = 128
  End Sub

  Sub Silniki_stop
  A1 = 0
  A2 = 0
  B1 = 0
  B2 = 0
  End Sub

Udostępnij ten post


Link to post
Share on other sites

Zacznijmy od tego, czy działa Ci wszystko bez PWM'a?

Udostępnij ten post


Link to post
Share on other sites

Witam!

Od strony elektroniki - tak. Na fototranzystorach jest napięcie ok. 1V, Sharpy również działają. Jeżeli podłączam wejścia pwm w L293d to jeździ, nie jestem tylko pewien czy dobrze (nad czujnikami ciągle pracuję).

Udostępnij ten post


Link to post
Share on other sites

Mówiąc szczerze tak patrzyłem na schemat, nie lepiej te 4 CNY70 wrzucić na ADC, które masz wolne, do tego miałbyś możliwość programowej kalibracji robota w zależności od podłoża. Mniejsza płytka bo nie musiałbyś stosować komparatora.

Udostępnij ten post


Link to post
Share on other sites

Witam!

Płytka już zrobiona (dość problematyczna) i dopasowana do obudowy. Teraz wziąłem się za napisanie programu i na razie same problemy (jak wyżej). Użyłem LM324 tylko dla tego, że dopiero uczę się BASCOM.

Udostępnij ten post


Link to post
Share on other sites

Nom, tylko że bez tego LM324 byłaby prostsza, a obsługa ADC wcale nie jest taka trudna, a tym bardziej napisanie auto kalibracji. Według mnie troszkę kijowo to rozwiązane, można było trochę prościej to zrobić.

Udostępnij ten post


Link to post
Share on other sites

Witam!

Również nad tym myślałem, ale doszedłem do wniosku, że z moją znajomością BASCOMA użyję czegoś na wzór https://www.forbot.pl/forum/topics7/modul-czujnikow-na-ukladzie-lm324-vt854.htm . Na razie chciałbym tylko go uruchomić (tyle tylko, że trochę mi się spieszy), a dopiero potem myśleć o jakiś usprawnieniach i modyfikacjach. Jak bym chciał podłączyć do ATmegi to tak samo jak do lm324? Rozważam możliwość wywalenia LM324 (jest w podstawce) i podłączenia kabelkowego 🙂

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

Zaloguj się, aby obserwować  

×
×
  • Utwórz nowe...