Skocz do zawartości

Problem z przerzutnikiem RS


bartek1333

Pomocna odpowiedź

Witam,
Mam pewien problem z tym chyba najprostszym programem na uC :-> .

Wygląda on tak

'program przeżutnka RS

$regfile = "m8def.dat"                                      'atmega8

Config Portd = Input                                        'port D ustawiony jako weście

Config Portb = Output                                       'port b jako wyście

Portd = 00111111                                            'dwa najmłodsze bity w stan niski

Portb = 10111111                                            '1 bit stan niski


Do                                                          'pętla nieskończona

If Pind.0 = 1 hen Pinb.1 = 1                               'jeżeli przycisk 1 wciśniety zaświeć led
If Pind.1 = 1 hen Pinb.1 = 0                               'jeżeli przycisk 2 wcisniety zgaś led

Loop

End

Do pind 0 i 1 są podlączone dwa przyciski, a do pinb. 1 led.

Po sprawdzeniu programu przez bascom wyskakują takie blędy:

Error 230 line: 16 you can not write to a PIN register [PINB. 1]

to samo w linii 17

Przeszukałem program kilka razy, ale nie za bardzo wiem o co chodzi.

Będzie on taktowany wewnętrznym oscylatorem. Mam coś przestawić w fuse bitach?

Proszę o pomoc

Link do komentarza
Share on other sites

Jeżeli kompilator ma problemy, to znaczy, że problem leży w kodzie (nie fusy, etc.). Znasz angielski? Gdybyś znał, to byś wiedział (z komunikatu), że nie można wpisać zmiennej do PINx. Z PINx odczytujemy stan, a zmienną wpisujemy do PORTx. Masz jeszcze babola (zamiast Then napisałeś hen)

Aha jeszcze liczby binarnie masz na odwrót.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

swierkdeck,
dzięki wielkie, bo wszystko działa 😅

Oczywiście dostajesz POMÓGŁ.

Jednak mam jeszcze pytanie które na poczatku zadałem:

Jeśli procesor ma być taktowany swoim własnym oscylatorem, to jaką dyrektywę dla kompilatora mam wpisać?

Czy coś w fuse bitach?

Link do komentarza
Share on other sites

Domyślnie jest taktowany wewnętrznym RC. Zazwyczaj 1MHz. Jeśli chcesz zwiększyć, to musisz zmienić FUSEBITy. Tak samo jeśli chcesz dodać zewnętrzny rezonator.

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

Czyli, jak nie chce zwiększać to mogę nic nie wpisywać?

[ Dodano: 05-03-2011, 21:52 ]

Wgrałem do uC ten program:

'program przeżutnka RS

$regfile = "m8def.dat"                                      'atmega8

Config Portd = Input                                        'port D ustawiony jako weście

Config Portb = Output                                       'port b jako wyście

Portd = 11111111                                            ' wszystko stan wysoki

Portb = 11111111                                            


Do                                                          'pętla nieskończona

If Pind.0 = 0 Then Portb.1 = 0                              'jeżeli przycisk 1 wciśniety zaświeć led
If Pind.1 = 0 Then Portb.1 = 1                              'jeżeli przycisk 2 wcisniety zgaś led

Loop

End

Gdy podłaczam napięcie do płytki stykowej dioda zaczyna szybko migać i co jakiś czas przestaje.

Gdy wciskam przycisk odpowiedzialny za włączenie diody to miga mociejszym światłem a gdy drugi - odwrotnie.

Co może być tego przyczyną?

Proszę o odpowiedź

Link do komentarza
Share on other sites

Napisać o taktowaniu musisz, nie dlatego czy chcesz zwiększać taktowanie, lecz wtedy, gdy korzystasz z jakichś funkcji czasowych w programie (opóźnianie itd). To co napiszesz w bascomie dot. takowania ma tylko wpływ na działanie programu. Ale jak szybko będzie realnie działać, to definiujesz w fusebitach.

Link do komentarza
Share on other sites

To co napiszesz w bascomie dot. takowania ma tylko wpływ na działanie programu.

Czyli przyczyną złego działania programu (post wyżej) mogło być to, że nie napisałem np. $crystal = 4000000 (chodzi o oscylator wewnątrz)? To jest tego przyczyna?

Pozdrawiam

Link do komentarza
Share on other sites

Co może być tego przyczyną?

Przede wszystkim drgania zestyków. Możesz to rozwiązać programowo (np. bascomowe narzędzie debounce, choć nigdy z niego nie korzystałem), albo sprzętowo przez prosty filtr RC:

Osobiście preferuję drugie rozwiązanie - chyba, że nie mam miejsca na płytce.

Czyli przyczyną złego działania programu (post wyżej) mogło być to, że nie napisałem np. $crystal = 4000000

Jeśli nic nie zmieniałeś w fusebitach, to domyślnie m8 chodzi chyba na 1MHz. Musisz więc wpisać $crystal=1000000.

Swoją drogą - mało ostatnio programuję w bascom, ale czy nie trzeba tam przypadkiem "zamykać" if'ów przez "end if"? Druga sprawa - liczby binarne zawsze wpisywałem zaczynając od "&B", rzeczywiście można to pominąć?

Link do komentarza
Share on other sites

Tak na moje oko, jak dasz przed drugim if'em else, to będzie dobrze 🙂

Nawyk miga mu chyba też jak się przycisków nie dotyka, więc gdzie tu drgania? Jak już to możliwe, że nie ma podciągnięcia do masy/zasilania.

Link do komentarza
Share on other sites

Dzięki wam za odpwiedzi

Nawyk miga mu chyba też jak się przycisków nie dotyka

tak, dokładnie tak.

Wspomnę jeszcze (chodź nie wiem czy to ważne), że posiadam taki programator: http://allegro.pl/nowosc-programator-isp-avr-usb-rohs-atmel-fv-i1479377550.html

Dorobiłem sobie także płytke na której w podstawke wsadzam uC i przez kanda programuje.

W Bascom w Options>programmer mam ustawiony External programmer, dalej AutoVrify,
jako program wybrałem avrdude - gui, a parameter "use hex file" i tam wkleiłem coś z avr dude.

Tylko dziwne (może tylko dla mnie) jest to, że gdy klikam Compile to niby się sprawdza a programator na zielono świeci. Dopiero gdy klikam "program chip">program to tam wyskakuje avrdude, klikam Execute i kontrolka w programatorze na czerwono się zapala (czyli wtedy programuje), potem wyskauje raport z kompilacji i są tam jakieś błędy (jutro sprawdze jakie).

To tyle. Może się znajdzie rada :->

Pozdrawiam

Link do komentarza
Share on other sites

Podłączyłem wszystko jak trzeba, wgrałem program i działa bez problemów. Z czego zasilasz układ? Może dodaj jakiś większy elektrolit między Uz a GND.

Do programowania polecam SinaProg - wygodny interfejs i idiotoodporność w kwestii blokowania fusebitów 😉

Link do komentarza
Share on other sites

A w konfiguracji portów użyłeś przed binarnymi &B ?

Układ mam zasilany z programatora (jeśli się programuje), a na płytce z 3x paluszków.

A ten Sina Prog to też sie konfiguruje z Bascom?

I napisałem jeszcze program, który ma zapalić led, ale zachowanie jest takie samo jak przy tamtym i wyskakuje bląd w avrdude (coś takiego) doesn't target i że program nie odpowiada. Czy problemem może być sam mikrokontroler - spalony czy coś takiego.?

I sprawdzałem jeszcze napięcia na uC pomiedzy Vz a gnd jest ponad 4V (tyle co baterie), a tam gdzie wychodzi led podaje mu ponad 2V.

Już nie wiem, sprubuje tego Sina prog.

Link do komentarza
Share on other sites

Nic nie zmieniałem w kodzie, zgrałem ten ostatni, który podałeś. Ruszył od razu.

SinaProg to nakładka avrdude - po prostu uruchamiasz, konfigurujesz i zgrywasz. Instrukcję obsługi znajdziesz w moich artykułach.

Link do komentarza
Share on other sites

Sciągnąłem tego sina proga, co jest na twojej stronie, Nawyk, ale wyskakuje błąd

Unable to locate the labviewrun-time engine

Więc pobrałem starszą wersje - 1.4.0.0

Podłączyłem programator, ustawiłem w sinaprog na USBasp uC na atmega8 ale nie wykrywa go:

avrdude -C avrdude.conf -c usbasp -p m8 -q

avrdude: error: could not find USB device "USBasp" with vid=0x16c0 pid=0x5dc

Sprawdzałem miernikiem połączenia wiele razy, ale wszystko było dobrze.

Czy może chodzić o jakieś sterowniki czy coś?

Pozdrawiam i dziękuję za odpowiedzi

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.