Skocz do zawartości

Pomocna odpowiedź

Napisano

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

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

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?

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.

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ź

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.

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

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ąć?

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.

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

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 😉

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.

Jeżeli target doesn't answer to prog nie może połąćzyć się z uC - sprawdź połączenia i podłączenie miso mosi, rst, sck i gnd.

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.

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

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