Skocz do zawartości

Pomocna odpowiedź

Napisano

Witam serdecznie,

Jakis czas temu zakupiłem sobie zl2avr. Próbuje sobie trochę poprogramować, lecz cały czas nie mogę dojść dlaczego nie działają mi komendy czasu typu wait, waitms.

Weźmy przykładowy program (czy jakikolwiek inny np. z kursu BASCOM na tym forum):

$regfile = "m8def.dat"                                      'informuje kompilator o pliku
$crystal = 8000000                                        'informuje kompilator o częstotliwości


  Config Portb = Input                                     'port b  jako wejścia
      Portb = &B11111111                                   'wszędzie stan spoczynkowy-0
Config Portd = Output                                       'pprt d jako wyjścia
      Portd = &B11111111                                   'wszędzie stan spoczynkowy-0

Do

Waitms 1000
Toggle Portb.0

Loop                                                

End               

Dioda w ogóle nie świeci. Tydzień temu udało mi się uruchomić tą komendę, jednak 1 sekunda trwała 20 sekund itp... Nic nie działało.

Próbowałem sam to rozgryźć, ale nie dałem rady, więc piszę.

Pozdrawiam i z góry dziękuje za pomoc.

Piłem herbatę z torebki, po rozwaleniu torebki, przystąpiłem do wróżenia ... a masz ustawione fuse bity dla zewnętrznego źródła częstotliwości :O? ... a dalej będziemy wróżyć jak coś więcej napiszesz. Ponieważ pierwsze widzę/słyszę/nie dowierzam żeby WAIT nie działał :O komuś w bascomie :O.

Elvis: Tak, zworki JP2 i JP3 są założone na pewno.

Luko: Możesz mi dokładnie wytłumaczyć co miałeś na myśli? Jak ustawić fuse bity na kwarc zewnętrzny?

Możesz mi dokładnie wytłumaczyć co miałeś na myśli? Jak ustawić fuse bity na kwarc zewnętrzny?

No to widać jestem dobry w tym wróżeniu z fusów, jak się nie ustawi fuse bitów, to jest tzw dupa. Ponieważ procesor nie wie że ma zewnętrzny wyznacznik czasu, dlatego jak sobie wpiszesz do pliku bascoma niby 8MHz, a w rzeczywistości pracuje z fabryczną prędkością 1MHz, to sekunda trwa o wiele dłużej .... rozwiązanie proste doczytać co to, jak się to ustawia, albo odłączyć rezonator, a w plikach bascoma stosować standardowe taktowanie, choć to zależy co jest na procku ustawione :/

ten kod powinien Ci działać:

$regfile = "m8def.dat"                                      'procesor Atmega8
$crystal = 8000000                                          'zegar 8MHz

Config Portd.1 = Output                                     'PORTD.1 jako wyjście [katoda diody do
                                                            'procesora przez rezystor 470R

Dioda Alias Portd.1                                         'PORTD.1 jako dioda

Do                                                          'początek pętli
Set Dioda                                                   'włącz diode
Waitms 500                                                  'czekaj 0,5 sekundy
Reset Dioda                                                 'resetuj PORTD.1
Waitms 500

Loop                                                        'koniec pętli
End                                                         'koniec programu

Miłego programowania 😉

Dzięki wielkie za odpowiedzi.

Feriar: Twój program działa, ale niestety 500ms trwa jakieś 8 sekund. Możliwe że mam uszkodzone sprzęt? Program działa tak samo zarówno ze zworkami JP2,JP3 jak i bez nich.

To świadczy tylko i wyłącznie o tym, że masz ustawione fuse bity na wewnętrzny oscylator. Skompiluj i wgraj taki kod:

$regfile = "m8def.dat"                                      'procesor Atmega8
$crystal = 1000000                                          'zegar 1MHz

Config Portd.1 = Output                                     'PORTD.1 jako wyjście [katoda diody do
                                                            'procesora przez rezystor 470R

Dioda Alias Portd.1                                         'PORTD.1 jako dioda

Do                                                          'początek pętli
Set Dioda                                                   'włącz diode
Waitms 500                                                  'czekaj 0,5 sekundy
Reset Dioda                                                 'resetuj PORTD.1
Waitms 500

Loop                                                        'koniec pętli
End                                                         'koniec programu 

Działa! 🙂

Cenie takich ludzi jak Wy. I macie mój respekt za szybkość z jaką udzielacie pomocy 🙂

Mógłbyś mi krótko objaśnić co się zmieniło Sabre? Gdybym chciał zmienić fusebity na zewnętrzny oscylator jak mógłbym to zrobić?

Zmieniła się 2 linijka tego kodu, jest to informacja dla kompilatora, z jaką częstotliwością on pracuje. Ja podałem tam 1MHz ponieważ taką częstotliwość ma wewnętrzny oscylator w prawie każdym nowym mikrokontrolerze AVR. Dokładnie to jest 8MHz, ale zawsze jest włączone dzielenie przez 8. Nie mam megi8 żadnej więc nie podam ci screena jak dokładnie wyłączyć to dzielenie, ale ogólnie zmiany dokonuje się poprzez kliknięcie na ikonkę programowania i wybór opcji Manual Program. Tam jest zakładka z fuse bitami, jeden z nich powinien mieć opis divide clock by 8 enabled, albo coś w tym stylu, nie pamiętam dokładnie, powinieneś to zmienić na disabled, potem klikasz write fusebits. Dodam na koniec, że nieumiejętne zmiany fuse bitów mogą prowadzić do zablokowania mikrokontrolera, przez co może stać się bezużyteczny.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...