sterownik na procku...

Rozmowy na temat układów elektronicznych sterowania obrabiarek CNC

george2002
Czytelnik forum poziom 1 (min. 10)
Czytelnik forum poziom 1 (min. 10)
Posty w temacie: 7
Posty: 17
Rejestracja: 22 lip 2004, 16:29
Lokalizacja: KrakĂłw

#21

Post napisał: george2002 » 13 wrz 2004, 22:02

hmm tak jak pisałem bawię się w bascomie dopiero miesiąc :)
czyli gdzie i jak to wsadzić ;) ?

próbowałem jużtakie opcje i nic :(
Gicr = &B11100000
lub
Set Mcusr.6
lub
Mcucsr = &B01000000
i też nic to nie dało przerwanie nie chodzi :(



Tagi:

Awatar użytkownika

ottop
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 10
Posty: 346
Rejestracja: 07 cze 2004, 13:11
Lokalizacja: Bielsko-Biała
Kontakt:

#22

Post napisał: ottop » 15 wrz 2004, 00:20

Problem tkwi chyba w samym Bascomie. Według opisu (datasheed) wektor dla przerwania INT2 powinien znajdować się pod adresem 0x012.

.equ I2Caddr =$011 ; Irq. vector address for Inter Intergrated Circuit interface
.equ INT2addr=$012 ;External Interrupt2 Vector Address << !!!!!!!!!!!!!
.equ OC0addr =$013 ;Output Compare0 Interrupt Vector Address

Natomiast po dekompilacji program wygląda tak:

+00000012: 9518 RETI Interrupt return << tu powinien być adres dla INT2
+00000013: C125 RJMP +0x0125 Relative jump << a jest tu !!!!!!
+00000014: 9518 RETI Interrupt return


Po wprowadzeniu do programu takiej poprawki:
...
On Int0 Krokx Nosave 'procedura obsługi 0 przrwania
On Int1 Kroky Nosave 'procedura obsługi 1 przrwania
On Int2 Krokz Nosave 'procedura obsługi 2 przrwania
On I2c Krokz Nosave << dodana linia
...
Efekt:
...
+00000011: 9518 RETI Interrupt return
+00000012: C126 RJMP +0x0126 Relative jump
+00000013: C125 RJMP +0x0125 Relative jump
+00000014: 9518 RETI Interrupt return
...
Po tej zmianie podczas symulacji przerwanie INT2 działa poprawnie. Dziwne???


george2002
Czytelnik forum poziom 1 (min. 10)
Czytelnik forum poziom 1 (min. 10)
Posty w temacie: 7
Posty: 17
Rejestracja: 22 lip 2004, 16:29
Lokalizacja: KrakĂłw

#23

Post napisał: george2002 » 15 wrz 2004, 01:12

kurce działa !!! :) denx za podpowiedz. czyli tak naprawdę to chyba wykryłem buga w bascomie :D


olo_ak
Nowy użytkownik, używaj wyszukiwarki
Nowy użytkownik, używaj wyszukiwarki
Posty w temacie: 1
Posty: 8
Rejestracja: 11 sie 2006, 18:12
Lokalizacja: Ruda Śląska

Zastanawiające

#24

Post napisał: olo_ak » 03 lis 2006, 13:03

Mam pytanie: Chciałem dokładnie taki sam układ zrobić, również programowany w Bascomie, korzystajćac z przerwań, ale naunął mi się jeden problem, który widzę, że u Ciebie też nie został unieknięty... Mianowicie: podprogram obsługi przerwania trwa pewien czas... i co jeżeli w tym czasie zostanie wygenerowany impuls z komputera... (pewnie w odpowiedzi dostanę informację, że prodprogram trwa bardzo krótko i napewno się skończy, zanim przyjdzie inny impuls :) ) Ale nasuwa się kolejne, inne pytanie, co jeżeli na porcie pojawią się dwa impulsy do sterowania dwoma osiami - przecież dwa podprogramy nie mogą być w jednym momencie realizowane, tym bardziej, że w środku podprogramów jesr disable interputs.... ??
Jeżleli odpowiedź jedt trywialna, to proszę i tak na to odpowiedzieć, gdyż nie jestem elektronikiem a mechanikiem i przyznaję się do mojej niewiedzy z pewnych zakresów...


Leoo
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 1
Posty: 4017
Rejestracja: 15 lis 2006, 22:01
Lokalizacja: Tarnobrzeg

#25

Post napisał: Leoo » 03 gru 2006, 21:43

olo_ak oczywiście ma rację, powiem więcej - w jednym czasie pojawią się sygnały sterujące wszystkimi trzema osiami!
Problem jak zwykle można rozwiązać, w tym przypadku niewielkim kosztem.
Wszystkie procesory posiadające sprzętowe przerwania, mają odpowiednie rejestry sterujące nimi. Jest to rejestr maski przerwań oraz rejestr priorytetu.
Usuwamy z listingu "disable interrups", ustawiamy właściwy poziom priorytetów dla wejść (przerywających - generujących przerwanie) STEP poszczególnych osi i... to wszystko, jeśli chodzi o sterownik.
Pozostaje sprawa "właściwego" poinformowania programu sterującego. Należy wyliczyć czas obsługi przerwania jednej osi i pomnożyć go przez ilość osi. Obliczona wartość będzie stanowiła minimalny okres, w którym PC może wysłać sygnał sterujący, jednoczesny do wszystkich osi.
To jest koszt, o którym pisałem na początku - sterownik będzie działał (dla x, y, z) 3 razy wolniej niż zbudowany z odrębnych układów.

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „Elektronika CNC”