Mały, prosty sterownik krokowca pod AVR

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

tomcat65
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 20
Posty: 1236
Rejestracja: 15 lis 2009, 02:46
Lokalizacja: Olsztyn
Kontakt:

Re: Mały, prosty sterownik krokowca pod AVR

#41

Post napisał: tomcat65 » 10 sty 2020, 22:53

Czemu timer działa na przerwaniach? Jako waveform generator i sprzętowa zmiana stanu pinu nie dało się?

Czy zmienna "warunek" jest stała i =1".
Jeśli tak to zapis:
boolean warunek = 1;
while (warunek){
PORTD = B00000010;
PORTD = B00000000;
}

Można tak:

while(1)
{PORTD ^=(1<<PD1);
PORTD^=(1<<PD1);
}



Awatar użytkownika

TOP67
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 27
Posty: 2224
Rejestracja: 17 wrz 2018, 10:47
Lokalizacja: Wrocław
Kontakt:

Re: Mały, prosty sterownik krokowca pod AVR

#42

Post napisał: TOP67 » 11 sty 2020, 00:53

Wywołanie noInterrupts() zatrzymuje liczenie czasu i generowanie przebiegów.

zmienną warunek dałem, żeby móc ją zmienić w przerwaniu i opuścić pętlę. Do samego testu szybkości nie jest potrzebna.

Zabawa z przesuwaniem bitów daje tylko 2MHz


tomcat65
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 20
Posty: 1236
Rejestracja: 15 lis 2009, 02:46
Lokalizacja: Olsztyn
Kontakt:

Re: Mały, prosty sterownik krokowca pod AVR

#43

Post napisał: tomcat65 » 11 sty 2020, 01:49

Zaczynałem od Arduino i szybko zrezygnowałem. Powód: brak możliwości dobrania się do "bebechów" procka. Jak to w tej chwili wygląda?
TOP67 pisze:Wywołanie noInterrupts() zatrzymuje liczenie czasu i generowanie przebiegów.

Licznik działa dalej, tylko brak możliwości wykonania obsługi przerwania i impulsy się zatrzymują. Przełączanie stanu pinu.

Moje pytanie jest dalej aktualne - czemu licznik działa w trybie z przerwaniami? Czemu nie w trybie CTC i toggle pin? Bez żadnych przerwań, które opóźniają pętlę programu. Zmiana stanów pinu odbywa się sprzętowo i niezależnie od programu. Żadnych lagów.

Awatar użytkownika

TOP67
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 27
Posty: 2224
Rejestracja: 17 wrz 2018, 10:47
Lokalizacja: Wrocław
Kontakt:

Re: Mały, prosty sterownik krokowca pod AVR

#44

Post napisał: TOP67 » 11 sty 2020, 12:52

tomcat65 pisze:
11 sty 2020, 01:49
Moje pytanie jest dalej aktualne - czemu licznik działa w trybie z przerwaniami? Czemu nie w trybie CTC i toggle pin? Bez żadnych przerwań, które opóźniają pętlę programu. Zmiana stanów pinu odbywa się sprzętowo i niezależnie od programu. Żadnych lagów.
Generalnie to nie jest pytanie do mnie, bo nie mam pojęcia co zrobił założyciel wątku.
Programuję Arduino zaledwie od kilku dni. Napisałem sobie program do automatycznego posuwu w tokarce bez śruby pociągowej, tu użyłem timera1 z gotowej biblioteki. Ostatnią styczność z programowaniem miałem 30 lat temu, jeszcze w Pascalu. Arduino bardzo mi się podoba, przypominają mi się czasy pisania w kodzie maszynowym na Atari. Skoro jest okazja do nauki, to chętnie próbuję. A nie ma to jak nauka połączona z doświadczeniem. Dlatego wziąłem oscyloskop, Arduino i próbuję.

Wiem już, że funkcja noInterrupts() zawiesza generowanie sygnału tone(), odliczanie timerów itp. I właśnie taki problem ma autor wątku.

Czy masz na myśli włączenie sprzętowego timera CTC, który będzie wysyłał impulsy STEP na odpowiedni pin? Rozumiem, że jest on niezależny od przerwań.
Pod pojęciem toggle pin masz na myśli PCINT? Ale one też są wyłączane przez noInterrupts().


Avalyah
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 22
Posty: 2364
Rejestracja: 29 lis 2015, 00:38
Lokalizacja: Bielsko-Biała

Re: Mały, prosty sterownik krokowca pod AVR

#45

Post napisał: Avalyah » 11 sty 2020, 13:17

tomcat65 pisze:Powód: brak możliwości dobrania się do "bebechów" procka.

A co Ci broni? Do jakich bebechów chcesz się dostać? Przecież nikt nie zabrania używać rejestrów w programach na arduino :P

Awatar użytkownika

TOP67
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 27
Posty: 2224
Rejestracja: 17 wrz 2018, 10:47
Lokalizacja: Wrocław
Kontakt:

Re: Mały, prosty sterownik krokowca pod AVR

#46

Post napisał: TOP67 » 11 sty 2020, 13:47

W trybie CTC udało się uzyskać 8 MHz, nawet przy wyłączonych przerwaniach.
Kształt piły, ale zawsze to impulsy.

#define myOutputPin 9

void setup ()
{
pinMode (myOutputPin, OUTPUT);
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
OCR1A = 0; // toggle after counting to
TCCR1A |= (1 << COM1A0); // Toggle OC1A on Compare Match.
TCCR1B |= (1 << WGM12); // CTC mode
TCCR1B |= (1 << CS10); // clock on, no pre-scaler
}
void loop () {
noInterrupts();
}


tomcat65
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 20
Posty: 1236
Rejestracja: 15 lis 2009, 02:46
Lokalizacja: Olsztyn
Kontakt:

Re: Mały, prosty sterownik krokowca pod AVR

#47

Post napisał: tomcat65 » 11 sty 2020, 15:12

Avalyah pisze:Przecież nikt nie zabrania używać rejestrów w programach na arduino

Jak zaczynałem parę lat temu, nie było opcji grzebania w rejestrach w IDE arduino. Dopiero od wersji 5, jak pamiętam, można wrzucać wstawki w C. Asemblerowe też można? :D
W tym czasie przeszedłem już na C.
TOP67 pisze:W trybie CTC udało się uzyskać 8 MHz, nawet przy wyłączonych przerwaniach.


No waśnie o to chodzi. W tym trybie program może robić cuda, mieć stado przerwań i delay'i, a impulsy będą stabilne.
Też nie wiem, co autor ma w kodzie. Ale podpowiadam :).

A co do f-cji 'delay' - jak ktoś chce robić coś więcej, niż błyskotki na ledach, lepiej o niej jak najszybciej zapomnieć.


Avalyah
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 22
Posty: 2364
Rejestracja: 29 lis 2015, 00:38
Lokalizacja: Bielsko-Biała

Re: Mały, prosty sterownik krokowca pod AVR

#48

Post napisał: Avalyah » 11 sty 2020, 15:45

tomcat65 pisze:Asemblerowe też można?

Assemblerem się nie bawię, nie jestem aż takim masochistą :P Tak czy inaczej w arduino już od co najmniej kilku lat można sobie pisać programy normalnie jak na czystą atmegę, dodatkowo mając możliwość korzystania z dobrodziejstw C++.


tomcat65
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 20
Posty: 1236
Rejestracja: 15 lis 2009, 02:46
Lokalizacja: Olsztyn
Kontakt:

Re: Mały, prosty sterownik krokowca pod AVR

#49

Post napisał: tomcat65 » 11 sty 2020, 18:24

Też nie mam ochoty " się pałować", ale czasem asembler się przydaje. Na szczęście w notach Atmela (teraz mikrochip) od ich prockõw są gotowe przykłady.

Nie będę się wykłócał o wyższości świąt 😀. Popularność Arduino i mnogość układów i bibliotek mówi sama za siebie. Ale ten ekosystem nijak nie wspiera poznania procka od środka. Skorzystaj z bibliotek i ciesz się że działa. A jak nie ma odpowiedniej - sorry wodzu.
A jak chcesz pogrzebać w rejestrach, trzeba poznać te bebechy. I bez C się nie obejdzie.


Avalyah
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 22
Posty: 2364
Rejestracja: 29 lis 2015, 00:38
Lokalizacja: Bielsko-Biała

Re: Mały, prosty sterownik krokowca pod AVR

#50

Post napisał: Avalyah » 11 sty 2020, 18:30

Dlatego najlepiej łączyć najlepsze to, co dają oba środowiska - od czystego mikrokontrolera mamy jego pożyteczne i szybkie funkcje w języku C, a Arduino dodaje potęgę C++ no i ogrom gotowych rozwiązań, żeby nie marnować czasu na obsługę wyświetlaczy i inne bzdury.

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „Elektronika CNC”