Aktualności: C64 Power - online od stycznia 2000 !

Autor Wątek: Attiny 2313 - problem z logiką?  (Przeczytany 777 razy)

0 użytkowników i 4 Gości przegląda ten wątek.

Offline ExciterELB

  • Level 6
  • ******
  • Wiadomości: 1025
Attiny 2313 - problem z logiką?
« dnia: 20 Stycznia 2016, 09:35 »
Elo,

wziąłem się niedawno za programowanie. Kiedyś trzeba. Ponieważ mam proste wymagania na początek na pierwszy rzut poszła Attiny 2313.

Program napisany w BASCOM (dziecinnie proste, po 2h już kumałem o co chodzi).

Problem pojawia się po załadowaniu wsadu do uC. Nie działa tak jak powinno. Co gorsze, w symulatorze w BASCOM AVR wszystko działa jak trzeba.

Temat jest tak prosty, że nie idzie tego spieprzyć, a jednak.... Jeden przycisk ma zmieniać stany logiczne na 2 wyjściach Attiny.

Wygląda tak:

start 0 0
push 0 1
push 1 0
push 1 1
push 0 0

..i tak w kółko

w symulatorze patrzyłem na wszystkie stany logiczne i zmienną sterującą if-ami dla poszczególnych stanów i działa dokładnie tak jak w założeniu... po wgraniu do Attiny mam:

start 0 0
push 0 1
push 1 1
push 0 0
push 0 0

czy może być to kwestia fusebitów w attiny? sterowana jest zegarem wew 8MHz i żadnych więcej cudów w/g mnie tu nie trzeba robić... chyba, że się mylę??

Z moich obserwacji wychodzi, że "ona" jakby podwaja stany, czy przypisze PINB.5 = 0, potem PINB.5 =1 czy Toggle PINB.5..bez znaczenia, zachowuje się tak samo.. dla niej wychodzi mniej więcej tak

0 = 0
1 = 0
1 = 1
0 = 1
0 = 0

Ktoś coś podpowie? Już drugi dzień z tym walczę, szukam po forach, po pdf'ach, ale nie widzę nigdzie podobnego problemu.



Lucas286

  • Gość
Re: Attiny 2313 - problem z logiką?
« Odpowiedź #1 dnia: 20 Stycznia 2016, 10:42 »
Nie wiem dokładnie jak to wygląda w Bascomie, ale zwróć uwagę czy portami na pewno steruje się PINB.5 = 0. W języku C PINB odczytuje się stan portu, natomiast zmienia stan PORTB.5 = 0. Sprawdź czy masz ustawione porty jako wyjścia (rejestr DDR).

Offline ExciterELB

  • Level 6
  • ******
  • Wiadomości: 1025
Re: Attiny 2313 - problem z logiką?
« Odpowiedź #2 dnia: 20 Stycznia 2016, 11:31 »
Są ustawione jako wyjścia. Temat sterowania portami/ pinami już przerabiałem i jest opanowany. Sterowałem już komendami SET, RESET, TOGGLE, PINX.X=0 i PINX.X=1 i żadnej różnicy w zachowaniu nie ma.  Nadal zachowanie fizyczne portów nie przekłada się na wartości logiczne. Podciągnąłem też rezystory polaryzujące 4.7k do poszczególnych linii (wiem,  że attiny ma wbudowane, ale tak na wszelki wypadek) i też to nie zmienia zachowania układu.

próbowałem już tak:

PIN1 i PIN2 zdefiniowany jako Bit, jako wyjście
X zdefiniowany jako Byte

X=0 - stan początkowy

do

komenda wywołująca podprogram po wciśnięciu klawisza ------to chodzi w pętli non stop do momentu wciśnięcia klawisza


loop

incr X

if X=1 then PIN1 = 1
if X=2 then PIN1 = 0
if X=3 then PIN1 = 1
if X=4 then PIN1 = 0

if X=1 then PIN2 = 0
if X=2 then PIN2 = 1
if X=3 then PIN2 = 1
if X=4 then PIN2 = 0

if X=4 then X=0

return


Lucas286

  • Gość
Re: Attiny 2313 - problem z logiką?
« Odpowiedź #3 dnia: 20 Stycznia 2016, 11:48 »
Jest jeszcze taka właściwość jak "drgania styków". Gdy robi się obsługę przycisków, trzeba o tym pamiętać i wprowadzać dodatkowe opóźnienia (kilkunasto lub kilkusetmilisekundowe), ponieważ właściwość przycisków jest taka, że jak go naciskasz to tak naprawdę program odczytuje kilka lub nawet kilkanaście zmian stanu portu podczas jednego naciśnięcia. Jeśli odczytujesz stan portu w pętli bez opóźnienia to taka właściwość nastąpi. Tylko w takim przypadku stany portów wyjściowych będziesz miał przypadkowe, bo nigdy nie wiadomo jaki będzie stan zmiennej X.

Offline ExciterELB

  • Level 6
  • ******
  • Wiadomości: 1025
Re: Attiny 2313 - problem z logiką?
« Odpowiedź #4 dnia: 20 Stycznia 2016, 12:28 »
to nie to, jest tam komenda do obslugi odczytywania klawiszy i ustawia sie w niej czas opoznienia (przewidzieli to)... ale jeszcze raz musze przeanalizowac to co napisales odnosnie ODCZYTOW i zmiany statusow na portach.... PINX.X i PORTX.X) bo to mnie tak cos tknelo..

Offline Kisiel

  • Level 7
  • *******
  • Wiadomości: 11447
  • Number 7 in all users competition...
    • http://wiki.projekt64.filety.pl/doku.php
Re: Attiny 2313 - problem z logiką?
« Odpowiedź #5 dnia: 20 Stycznia 2016, 12:32 »
Jak nie masz debouncingu to masz nie ustalone stany na wejściu.
idz wyprostowany wśród tych co idą na kolanach

...w przypadku checi zakupu UK1541,GA,MA,T8500,T7501 prosze o kontakt na Facebooku, haslo: UK1541....

Offline rs2322

  • Level 5
  • *****
  • Wiadomości: 540
  • ASAP
Re: Attiny 2313 - problem z logiką?
« Odpowiedź #6 dnia: 20 Stycznia 2016, 18:00 »
jak wodzu napisal albo debounce, albo "wait 100ms" lub timer turn on :)

$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

   debounce pinb.0, 1, wlacz, sub           

 loop                                       'koniec petli

wlacz:                                      'etykieta
toggle portd.0                              'zmień stan wyprowadzenia
return                                      'powrót

end                                         'koniec programu

see more : http://www.forbot.pl/forum/topics20/kurs-bascom-lekcja3-zaczynamy-programowac-vt1091.htm
Pamięci RAM każda ilość: KM4164, 4464, TMS 4464 MT1259-10
PCB - projekty na zamówienie.
Programowanie pamięci EEPROM, EPROM - free !
SD2IEC http://c64power.com/forumng/index.php?topic=6630.0

Offline ExciterELB

  • Level 6
  • ******
  • Wiadomości: 1025
Re: Attiny 2313 - problem z logiką?
« Odpowiedź #7 dnia: 21 Stycznia 2016, 22:36 »
W języku C PINB odczytuje się stan portu, natomiast zmienia stan PORTB.5 = 0.
i chwała Ci za to. I to był właśnie mój błąd. Przeczytałem instrukcję na szybko i zamiast ZMIENIAĆ stany portów to je odczytywałem. Gdzieś w jakimś PDF'ie przeczytałem, że sterowanie poszczególnymi PIN'ami odbywa się właśnie przez komendę PINX.X i trwale siedziałem w tym błędnym przeświadczeniu.
Teraz jest malinowo i gra gitara :) Wszystko działa tak jak chciałem :)

Wcześniej w poście pisałem z pamięci i "komenda wywołująca podprogram po wciśnięciu klawisza" - miałem na myśli właśnie debouncig, tylko nie pamiętałem jak się nazywa.

Dzięki jeszcze raz za "natchnienie".