Skocz do zawartości

[Kurs] BASCOM - lekcja3 - zaczynamy programować


Ikar

Pomocna odpowiedź

Podając wartość przy $crystal mówisz kompilatorowi, jakie taktowanie ma uC, na który piszesz (w Hz, czyli ilość "tyknięć" oscylatora na sekundę). Niezależnie czy masz kwarc wewnętrzny czy zewnętrzny. Jeśli dasz kwarc zewnętrzny 1MHz, to dalej piszesz 1000000, jeśli wewnętrzny 8MHz, to piszesz 8000000. Tylko, żeby używać oscylatora innego niż wewnętrzny 1MHz trzeba zmieniać fusebity. I pamiętaj, jesli podasz w $crystal 16000000, a podpięty oscylator będzie miał 1MHz, to mikrokontroler będzie pracował z częstotliwością 1MHz, a jak dasz tam jeszcze jakieś waity to już w ogóle kaszana, rozlezie się to w czasie (będzie działać 16x wolniej).

Link do komentarza
Share on other sites

czyli dla wewnętrznego oscylatora robie $crystal = 1000000 tak?

Niekoniecznie - niektóre uC (np. bodajże Atmega32) działają domyślnie na wbudowanym rezonatorze RC o taktowaniu 4MHz, czyli $crystal = 4000000. W razie wątpliwości pomrugaj sobie diodą (np. zapal na 1s, zgaś na 1s i zapętlić) i sam oceń czy dobrze działa.

Link do komentarza
Share on other sites

Napisałem sobie taki kod:

$regfile = "m16def.dat"
$crystal = 1000000
'http://www.forbot.pl/forum/topics20/kurs-bascom-lekcja3-zaczynamy-programowac-vt1091,200.htm#40612

Config Rc5 = Pind.3       'odbiornik rc5 do int1
Config Porta = Output     ' cały port B jako wyjście
Config Pinc.0= Output
Config Pinc.1= Output
Config Pinc.2= Output
Config Pinc.3= Output
Porta = &B00000000
Portc.0 = 0
Portc.1 = 0
Portc.2 = 0
Portc.3 = 0


Dim Address As Byte , Command As Byte
Declare Sub S1up
Declare Sub S2down
Declare Sub S1down
Declare Sub S2up
Declare Sub S3up
Declare Sub S3down


Enable Interrupts


Waitms 1000


Do

  Getrc5(address , Command)
  Command = Command And &B01111111
  If Address <> 255 And Command <> 127 Then
     If Command = 1 Then
        s1up
     Elseif Command = 2 Then
        s1down
     Elseif Command = 4 Then
        s2up
     Elseif Command = 5 Then
        s2down
     Elseif Command = 6 Then
        s3up
     Elseif Command = 7 Then
        s3down

     End If

     Waitms 100
  End If

Loop

sub s1up
'zasteruj silnikiem nr1

end sub
sub s1down
'zasteruj silnikiem nr1

end sub

sub s2up
'zasteruj silnikiem nr2

end sub
sub s2down
'zasteruj silnikiem nr2

end sub

sub s3up
'zasteruj silnikiem nr3

end sub
sub s3down
'zasteruj silnikiem nr3

end sub

End

I mam pytanie-takie wywołanie procedur jest prawidłowe(znalazłem na necie własnie taka wersje oraz wersje z call)? Prgoram skompilował się w Bascom AVR Demo v2.2

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

Witam.

Przeczytałem kursy-bascoma i postanowiłem wziąć się do programowania 🙂

Dawno już zakupiłem programator stk200, uC i inne potrzebne rzeczy. Dziś polutowałem uC z programatorem i postanowiłem na próbę wgrać jakiś gotowy program.

Skonfigurowałem Bascom-AVR i niestety wyskakują mi błędy.

Na początku:

'..Bascom-avr\noname1.bin NOT FOUND'

Kolejny:

'Couldn't identivy chip with ID:FFFFF'

Następnie wyświetla się:

'Selected chip and target chip do not match AT90S1200 <> ATtiny461'

...

Czyli wychodzi na to, że nawet nie znajduje programatora - układu.

Wykonałem wszystko troszkę niestarannie, ale chciałem tylko sprawdzić jak to działa i nie jest to finalna wersja podkładki do programatora. Wszystkie luty i połączenia posprawdzałem dokładnie miernikiem i wszystko jest OK. (dodaję jednak fotki).

Oczywiście zasilanie podpiąłem.

*Przepraszam za naprawdę kiepskie lutowanie, ale nie posiadam jeszcze dobrej lutownicy.

W czym może leżeć problem i jak się za to zabrać ?

edit. - poprawiłem zdjęcia.

Pozdrawiam.

Link do komentarza
Share on other sites

Potrenuj lutowanie przede wszystkim bo na pewno masz tam jakieś zimne luty i coś nie łączy. Masz jakiś błąd w połączeniach, albo nie zasiliłeś czegoś, programatora albo mikrokontrolera.

Link do komentarza
Share on other sites

Dziękuje za odpowiedź. Rano chciałem napisać już ze mam źle polutowane, jednak forum nie działało, nie uwzględniłem połączeń które już były na płytce. Właśnie kupiłem nowa płytkę i dziś będę dalej próbował. 🙂

Pozdrawiam.

Link do komentarza
Share on other sites

Przepraszam za post pod postem, ale mam nowy problem.

Nie wiem co może być źle. Programator śmiga, programuje etc. Nie ma żadnych błędów.

Wczoraj wykonałem ten testowy układ z pierwszego postu i niestety nie działał (na płytce uniwersalnej lutowałem). Postanowiłem zakupić płytkę stykową... to tez uczyniłem. Dziś zmontowałem wszystko na nowo. Sprawdziłem miernikiem VCC i GND czy wszędzie dociera gdzie trzeba i jest ok, tactswitche podłączone dobrze, sprawdzałem czy po naciśnięciu zaczynają przewodzić i jest z nimi wszystko OK (tj, ustawiam miernik na funkcję sprawdzania obwodu, dokładam do pinów switcha - miernik jest cicho, naciskam switch - mierik piszczy)

Wgrałem ten program:

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


config portb=input                          '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


do                                         'pętla nieskończona

  if pinb.0=1 then                         'jeżeli przycisk 1 wciśnięty
  portd.0=1                                'zapal diode
  elseif pinb.1=1 then                     'jeżeli przycisk 2 wciśnięty
  portd.0=0                                'zgaś diodę
  endif                                    'koniec bloku warunkowego

loop                                       'koniec pętli

end                                         'koniec programu 

I niestety po podłączeniu zasilania dioda się zapala, a przyciski nie mają na nią żadnego wpływu. Jak na mój gust to musi być coś z moim uC (stan spoczynkowy diody powinien być 0, czyli nie powinna się palić), czy mam rację, czy może być inna przyczyna ? Dodam, że program czasowy - migacz z diody, na tej płytce działa bez problemu i dioda miga, czyli programator działa i dobrze wrzuca programy.

Niestety mam tylko jedną Attiny2313 i dlatego pytam, bo nie mam jak sam sprawdzić.

Pozdrawiam.

Link do komentarza
Share on other sites

Czy sprzętowo masz podciągnięte piny, na których są switche do Vcc? W AVRach przyjęło się, że switch jest zwierany do masy a pin jest podciągnięty rezystorem do Vcc lub zamiast zewnętrznych rezystorów używa się tylko wewnętrznego podciągania.

Wtedy tak wygląda kod:

Config Pind.4 = Input

Do

  Set Portd.4
  If Pind.4 = 0 Then
  ...
  End if

Loop
End

Daleko szukać nie musiałem, strona 7 tego tematu (wiedziałem, że już o tym pisałem tutaj), jakbyś przeczytał to wiedziałbyś, że w tym artykule Ikar nie zrobił obsługi przycisków zbyt prawidłowo.

  • Lubię! 1
Link do komentarza
Share on other sites

Czy sprzętowo masz podciągnięte piny, na których są switche do Vcc?

Tak, dodaję zdjęcie, bo do końca nie wiem czy chodzi o to, ale wydaje mi się, że tak.

Temat czytałem. Widziałem, że ktoś miał już problem, że dioda się ciągle paliła, ale nie wnikałem i myślałem, ze jak zrobiłem tak jak autor poradnika to wszystko powinno śmigać.

Nie bardzo rozumiem gdzie mam dodać napisany przez Ciebie kod (w którym miejscu tego który ja podałem), mógłbyś wyjaśnić ? 🙂

Dodaję jeszcze ww zdjęcie do weryfikacji połączeń:

Pozdrawiam.

Link do komentarza
Share on other sites

Twoje zdjęcie niczego nie wyjaśnia, a jeśli nie potrafisz zrozumieć kodu i tego co napisałem w poście wyżej to sugeruję czytać do skutku i naukę Bascoma od początku.

Napisałem ci jak powinno wyglądać podłączenie switcha do mikrokontrolera i jak powinna wyglądać przykładowa obsługa przycisku przy takim podłączeniu.

Link do komentarza
Share on other sites

Chyba jakiś niekumaty wyjątkowo jestem 🙁

Z wyjściami nie mam problemu, pisałem sobie kilka programów dla 5 ledów, żeby w różny sposób się zapalały gasiły, przesuwał się stan na portach itp. A co do wejść, nie mam pojęcia jak uzyskać stan wysoki.

Napisałem prościutki program;

$regfile = "attiny2313.dat"                                 'typ proca
$crystal = 1000000                                          'taktowanie


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



      Do                                                   'petla neiskonczona

If Portd.1 = 0 Then                                         'jesli switch niewciśnięty to
Portb.3 = 0                                                 'dioda czerwona świeci
Elseif Portd.1 = 1 Then                                     'jeśli switch wciśnięty to
Portb.2 = 0                                                 'dioda żółta świeci
End If                                                      'koniec warunku

      Loop                                                 'koniec petli

End                                                         'koniec programu

Podłączone mam 2 diody pod 2 porty wyjściowe , są one podciągnięte przez rezystor do VCC i nie wiem co ze switchem.

W AVRach przyjęło się, że switch jest zwierany do masy

Obecnie mam zrobione tak, że switch podłączony jest do portu wejścia i do masy, czyli chyba Ok.

a pin jest podciągnięty rezystorem do Vcc lub zamiast zewnętrznych rezystorów używa się tylko wewnętrznego podciągania.

Jeśli chciałbym to zrobić zewnętrznie to jaki rezystor zastosować ? Jeśli wewnętrznie (co jest chyba lepsza opcją), to jak ? Bardzo proszę dodajcie to podciągniecie do programu który wrzuciłem.

Przy tak napisanym programie świeci się tylko czerwona dioda, i naciskanie switcha nic nie zmienia.

Przejrzałem wiele tematów i znalazłem tylko jakieś skomplikowane podłączenia switchy przez tranzystory etc.

Z góry bardzo dziękuję za pomoc.

Pozdrawiam.

Link do komentarza
Share on other sites

Tam, gdzie chcesz mieć podciągnięte wejście, wpisujesz do Portu 1.

I wtedy gdy naciśniesz switch, to na tej linii portu otrzymasz 0, sprawdzasz to stanem rejestru Pin (a nie Port !)

Co prawda piszę w C, ale spróbuję i twój program powinien (chyba) wyglądać tak:

$regfile = "attiny2313.dat"                                 'typ proca 
$crystal = 1000000                                          'taktowanie 


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



      Do                                                   'petla neiskonczona 

If Pind.1 = 0 Then                                         'jesli switch 1 wciśnięty to 
Portb.3 = 0                                                 'dioda czerwona świeci 

Elseif Pind.2 = 0 Then                                  'jeśli switch 2 wciśnięty to 
Portb.2 = 0                                                 'dioda żółta świeci 
End If                                                      'koniec warunku 

      Loop                                                 'koniec petli 

End    
  • Lubię! 1
Link do komentarza
Share on other sites

Linux, czy tak ciężko zajrzeć do helpa polskiego czy oryginalnego od Bascoma i czytając mój kod sprawdzić co po kolei oznaczają polecenia?

Z mojego punktu widzenia nie wykazujesz ani grama samodzielności, czekasz tylko na gotowiec, a nawet jak go dostaniesz to i tak z tego nic nie rozumiesz więc powiedz mi jaki to ma sens?

Link do komentarza
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.

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