Skocz do zawartości

[Kurs] BASCOM - lekcja3 - zaczynamy programować


Ikar

Pomocna odpowiedź

Witam!

Jestem tu zupełnie nowy, a w dziedzinie mikrokontrolerów to już zupełny świeżak 🙂

Mam pewien problem: otóż chcąc poeksperymentować z bascomem zorganizowałem sobie prostą płytkę testową z ATMega 128. Do PortB.7 dopięta jest dioda LED podłączona do +5V przez rezystor. Kwarc 16MHz. Chciałem zmusić ATMegę do migania, więc w Bascomie napisałem coś takiego:

$regfile = "m128def.dat"

$crystal = 16000000

Config Portb = Output

Portb = &B0000000

 

 

Do

 

Waitms 500

Toggle Portb.7

 

Loop

program skompilowałem, wgrałem na ATMege i wielka kupa 🙁 dioda cały czas świeci, nic nie miga 🙁 Czy wie ktoś z Was, co może być przyczyną? co tutaj robię nie tak?

Z góry dzięki za odp

Pozdrawiam!

Link do komentarza
Share on other sites

Spróbuj popracować na wewnętrznym oscylatorze RC (zmień deklarację crystal na np. $crystal = 4000000). Możliwe, że nie ustawiłeś tzw. fuse'ów do pracy na 16MHz. Jeśli zacznie działać, to zainteresuj się tym tematem (fuse bits).

Jeśli to nie podziała, to zamiast do Vcc, podłącz diodę przez rezystor (np 470Ohm) do GND. Zapalisz ją ustawiając stan wysoki na porcie i nie powinno być żadnych problemów.

Link do komentarza
Share on other sites

Moi Drodzy!

Witam was w pierwszym moim przejawie aktywnosci na tym forum.

Naczytalem sie z necie o problemach z programatorewm bo sam je mialem. Nasz programator-samorobek u mnie nie dzialal. Nie znam przyczyny, znam natomiast roziwazanie a rozwiazanie okazalo sie bardzo proste:)

Przerobilem programator na ten w/g schematu stąd: http://mirley.firlej.org/files/Art_PierwszeProg_01.gif i wszystko zaczela dzilac.

Kolejna sprawa. Zdzwilem sie kiedy zaczalem juz programowac (ucieszony), ze po zaprogramowaniu dioda swieci... Kombinowalem, kombinowalem i wykombinowalem. Zamienilem w kodzie input na output i odwrotnie. Teraz zastanawiam sie czy dlatego ze zle podlaczylem sie swiecila czy dlatego ze faktycznie w kodzie byl blad.

Nie poradzilem sobie z jednym. Dioda dziala a jakze... ale nie swieci tak jakbym ja podlaczyl bezposrednio do zasilania z USB... Ktos moze mi to wytlumaczyc i ew. poradzic co zrobic zeby jednak tam przeplywalo 5V.. a moze tak ma byc? 🙂

__________

Komentarz dodany przez: Sabre

Popraw błędy, daj jakiś schemat twojego podłączenia tego leda, kod jaki wgrałeś, chyba, że mamy wróżyć z fusów.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Słabo mnie zrozumieliscie:)

Dalem tylko wskazowke tym ktorzy mieli lub maja problem z najprostrzym programatorem LPT na rezystorach. Wszystko dziala po zrobieniu go w/g wyzej podanego schematu.

-edit-

Juz wszystko jasne 🙂 Dioda swieci normalnie. Wszystko dziala jak nalezy 😃

Kod wyglada tak:

$regfile = "attiny2313.dat"                                 'najpierw określamy typ proca
$crystal = 1000000                                          'definiujemy z jakim taktowaniem będzie pracował


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

Troche malo logiczne jak dla mnie czemu port B jest na wyjsciu skoro przyciski sa podlaczone do VCC i ukladu... Ale dziala...

Link do komentarza
Share on other sites

Nie wiem czy problem już był poruszany nie chce mi się czytać wszystkich postów, ale w kursie są błędy.

Opcja z jednym przyciskiem który jednocześnie zapala i gasi diod jest błędna. Zauważ że gdy przycisk jest wciśnięty dioda zmienia swój stan kilka set razy zależnie od kwarcu. Wcale nie jest powiedziane że po puszczeniu guzika zmieni stan, szanse 50/50 😋

Link do komentarza
Share on other sites

Nie wiem czy problem już był poruszany nie chce mi się czytać wszystkich postów, ale w kursie są błędy.

Opcja z jednym przyciskiem który jednocześnie zapala i gasi diod jest błędna. Zauważ że gdy przycisk jest wciśnięty dioda zmienia swój stan kilka set razy zależnie od kwarcu. Wcale nie jest powiedziane że po puszczeniu guzika zmieni stan, szanse 50/50 😋

Nie do końca masz rację, wszystko zależy od opóźnienia jakie się da po pierwszym odczycie zmiany stanu przycisku. Ostatnio pisałem obsługę 3 przycisków, do tego całe menu, po wykryciu zmiany stanu przycisku, gdzie sprawdzanie stanu odbywało się 200 razy na sekundę, wystarczy dać wait'a powiedzmy 300ms w trakcie którego użytkownik zwalnia przycisk, ponieważ zaobserwował zmianę stanu wywołaną poprzez właśnie wciśnięcie przycisku i wykonanie odpowiedniej obsługi tego zdarzenia (zmiana stanu diody led).

Innymi słowy, liczy się pierwsze zbocze zmiany stanu przycisku, nie stan i nie drugie zbocze.

Link do komentarza
Share on other sites

Witam wszystkich

Posiadam zestaw uruchomieniowy z Atmega16 i nie mogę opanować PWM

Bardzo proszę o prosty kod sterowania np. regulowania za pomocą dwóch przycisków jasnością diody led

Dodam że jestem początkujący

Czekam na jakąkolwiek pomoc

Link do komentarza
Share on other sites

Konfigurowanie PWM w BASCOMie jest banalnie proste.

Przykład:

'Start PWM'a
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
'PWM1A => dioda 1
'PWM1B => dioda 2

Następnie zmieniasz wartości PWM1A i PWM1B w zakresie 0-255 - to daje Ci na wyjściu pinów OC1A i OC1B napięcie w zakresie 0-5V.

Link do komentarza
Share on other sites

No dobrze ale jak to zrobić za pomocą przycisków???

[ Dodano: 15 Lis 09 01:09 ]

A wogóle szanowni koledzy powiedzcie co tu jest żle?

$regfile = "m16def.dat"
$crystal = 16000000

config pina.0 = input
config pina.1 = input
config pind.5 = output
config TIMER1 = PWM , PWM = 8

compare A PWM = clear down,
compare B PWM = disconnect,
prescale = 64

dim I as Byte
s1 alias pina.0
s2 alias pina.1

set PORTA.0
set PORTA.1

PWM1a = 0

do
if s1 = 0 then
waitms 25
if s1 = 0 then
incr I
if I = 0 then
  I = 225
end IF
PWM1a = I
waitms 20
end IF
end IF

if s2 = 0 then
waitms 25
if s2 = 0 then
decr i
if I = 255 then
  I = 0
end IF
PWM1a = I
waitms 20
end IF
end IF
loop
end
Link do komentarza
Share on other sites

U ciebie

config TIMER1 = PWM , PWM = 8
compare A PWM = clear down,
compare B PWM = disconnect, 

a tak powino być

Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down 
Link do komentarza
Share on other sites

zrobiłem tak:

$regfile = "m16def.dat"
$crystal = 16000000

config pina.0 = input
config pina.1 = input
config pind.5 = output

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

dim I as Byte
s1 alias pina.0
s2 alias pina.1

set PORTA.0
set PORTA.1

PWM1a = 0

do
if s1 = 0 then
waitms 25
if s1 = 0 then
incr I
if I = 0 then
  I = 225
end IF
PWM1a = I
waitms 20
end IF
end IF

if s2 = 0 then
waitms 25
if s2 = 0 then
decr i
if I = 255 then
  I = 0
end IF
PWM1a = I
waitms 20
end IF
end IF
loop
end

i nie działa

[ Dodano: 15 Lis 09 03:15 ]

Ok. Więc jak powinien wyglądać kod

Mianowicie chcę za pomocą dwóch przycisków "+" i "-" sterować jasnością świecenia diody led

Link do komentarza
Share on other sites

Może spróbuj zwiększać/zmniejszać I o większą wartość? Np o 20 albo 30 na początek. Albo nie startuj PWM'a od 0, tylko np. 100 - tak dla sprawdzenia.

Nie pamiętam też czy padło już to pytanie, ale czy ustawiłeś fusebity i dodałeś zewnętrzny rezonator kwarcowy?

Link do komentarza
Share on other sites

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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.