RAMPA na ARDUINO
-
- ELITA FORUM (min. 1000)
- Posty w temacie: 14
- Posty: 1715
- Rejestracja: 16 kwie 2009, 07:55
- Lokalizacja: Kraków/Kornatka
Taki żarcik sam korzystałem i korzystam z VIM-a na linuxie bo jak pozna się jego nieco możliwości to inne edytory konsolowe wydają się denne
niewątpliwa jego zaletą jest że można z niego od razu wykonywać programy a nie trzeba przełączać się do konsoli i wiele innych jak wbudowane kolorowanie składni i porównywanie dokumentów dowolne otwieranie plików w pionie czy też w poziomie
Pozdrawiam
niewątpliwa jego zaletą jest że można z niego od razu wykonywać programy a nie trzeba przełączać się do konsoli i wiele innych jak wbudowane kolorowanie składni i porównywanie dokumentów dowolne otwieranie plików w pionie czy też w poziomie

Pozdrawiam

"I siedzieli oni razem pod nagim DOS-em i nie wstydzili sie tego." 

-
Autor tematu - Lider FORUM (min. 2000)
- Posty w temacie: 64
- Posty: 3962
- Rejestracja: 18 wrz 2004, 12:51
- Lokalizacja: k/w-wy
- Kontakt:
Edytor tekstów... mniej lub bardziej rozwinięty z paroma dodatkowymi przyciskami to tylko otoczka.blue_17 pisze:W Code::blocks albo w eclipse możesz pod linuxem pisać dla armówmarkcomp77 pisze:a ja chce to robić jedynie pod linuksem...
z tego co przeczytałem -- wynika, że GCC pod linuksem na ARMa w pełni może wykorzystać możliwości cortexowości
Chyba że wolisz VIM-a
Najistotniejszy jest kompilator + sposób/metoda zrzutu danych do uC...
[ Dodano: 2012-04-19, 11:25 ]
na moim ubuntu 11.10 poszedł ten opis budowy:
Kod: Zaznacz cały
$ sudo apt-get install flex bison libgmp3-dev libmpfr-dev libncurses5-dev
libmpc-dev autoconf texinfo build-essential libftdi-dev
$ git clone https://github.com/esden/summon-arm-toolchain.git
$ cd summon-arm-toolchain
$ sudo ./summon-arm-toolchain
$ cd ..
$ sudo apt-get install libsgutils2-dev libusb-1.0-dev
$ git clone https://github.com/texane/stlink.git
$ cd stlink
$ make
[ Dodano: 2012-04-19, 11:38 ]
Kod: Zaznacz cały
smark@hpecik:~/ARM/stlink$ sudo ./gdbserver/st-util fu bar
non-option ARGV-elements: fu bar
2012-04-19T11:36:28 INFO src/stlink-usb.c: -- exit_dfu_mode
2012-04-19T11:36:28 INFO src/stlink-common.c: Loading device parameters....
2012-04-19T11:36:28 INFO src/stlink-common.c: Device connected is: F4 device, id 0x20006411
2012-04-19T11:36:28 INFO src/stlink-common.c: SRAM size: 0x30000 bytes (192 KiB), Flash: 0x100000 bytes (1024 KiB) in pages of 16384 bytes
Chip ID is 00000413, Core ID is 2ba01477.
KARL - should read back as 0x03, not 60 02 00 00
init watchpoints
Listening at *:4242...
teraz trzeba pouczyć się JAK

[ Dodano: 2012-04-19, 11:44 ]
http://youtu.be/Jh58kwllU0s
[ Dodano: 2012-04-19, 12:28 ]
kompilacja przykładu
Kod: Zaznacz cały
$ EXPORT PATH=~/sat/bin:$PATH
$ cd stlink/examples/blink
$ make CONFIG_STM32F4_DISCOVERY=1

przykład (tylko wersja F4):
Kod: Zaznacz cały
/* missing type */
typedef unsigned int uint32_t;
/* hardware configuration */
#define GPIOD 0x40020C00 /* port D */
#define GPIOD_MODER (GPIOD + 0x00) /* port mode register */
#define LED_PORT_ODR (GPIOD + 0x14) /* port output data register */
#define LED_GREEN (1 << 12) /* port D, pin 12 */
#define LED_ORANGE (1 << 13) /* port D, pin 13 */
#define LED_RED (1 << 14) /* port D, pin 14 */
#define LED_BLUE (1 << 15) /* port D, pin 15 */
void _tmain(void) {
main();
}
static inline void setup_leds(void)
{
*(volatile uint32_t*)GPIOD_MODER |= (1 << (12 * 2)) | (1 << (13 * 2)) |
(1 << (13 * 2)) | (1 << (14 * 2)) | (1 << (15 * 2));
}
static inline void switch_leds_on(void)
{
*(volatile uint32_t*)LED_PORT_ODR = LED_BLUE | LED_GREEN | LED_ORANGE | LED_RED;
}
static inline void switch_leds_off(void)
{
*(volatile uint32_t*)LED_PORT_ODR = 0;
}
#define delay() \
do { \
register unsigned int i; \
for (i = 0; i < 1000000; ++i) \
__asm__ __volatile__ ("nop\n\t":::"memory");\
} while (0)
/* static void __attribute__((naked)) __attribute__((used)) main(void) */
void main(void)
{
setup_leds();
while (1)
{
switch_leds_on();
delay();
switch_leds_off();
delay();
}
}
jak to wrzucić do ARMka:
Kod: Zaznacz cały
$ arm-none-eabi-gdb
(gdb) target extended localhost:4242
(gdb) load blink_F4.elf
(gdb) continue
[ Dodano: 2012-04-19, 12:29 ]
PUNKT dla jarekk --- modulik jest miodzio pod linuksem!
SpotkanieCNC: STOM-TOOL Marzec 2014
http://www.cnc.info.pl/topics79/spotkan ... t55028.htm
http://www.cnc.info.pl/topics79/spotkan ... t55028.htm
-
Autor tematu - Lider FORUM (min. 2000)
- Posty w temacie: 64
- Posty: 3962
- Rejestracja: 18 wrz 2004, 12:51
- Lokalizacja: k/w-wy
- Kontakt:
postaram się...blue_17 pisze:Może kolega pokazać jeszcze jak debbugować pod linuxem dla pełności opisu
choć chciałem jeszcze poinformować o problemie jaki powstał... podczas pierwszych prób z podłączeniem -- problem jest TRYWIALNY -- kabel USB
na pierwszym -działało...
na drugim.. który wyglądał lepiej - NIE
nie działało tak
Kod: Zaznacz cały
sudo ./gdbserver/st-util fu bar
non-option ARGV-elements: fu bar
2012-04-21T22:14:13 WARN src/stlink-usb.c: Couldn't find any ST-Link/V2 devicesm
Kod: Zaznacz cały
sudo ./gdbserver/st-util fu bar
non-option ARGV-elements: fu bar
2012-04-21T22:18:25 INFO src/stlink-usb.c: -- exit_dfu_mode
2012-04-21T22:18:25 INFO src/stlink-common.c: Loading device parameters....
2012-04-21T22:18:25 INFO src/stlink-common.c: Device connected is: F4 device, id 0x20006411
2012-04-21T22:18:25 INFO src/stlink-common.c: SRAM size: 0x30000 bytes (192 KiB), Flash: 0x100000 bytes (1024 KiB) in pages of 16384 bytes
Chip ID is 00000413, Core ID is 2ba01477.
KARL - should read back as 0x03, not 60 02 00 00
init watchpoints
Listening at *:4242...
Kod: Zaznacz cały
mark@hpecik:~/ARM/stlink/example/blink$ arm-none-eabi-gdb
GNU gdb (GDB) 7.3.1
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-unknown-linux-gnu --target=arm-none-eabi".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
(gdb) target extended localhost:4242
Remote debugging using localhost:4242
0x0800788c in ?? ()
(gdb) load blink_
blink_32L.elf blink_32VL.elf blink_F4.elf
(gdb) load blink_F4.elf
Loading section .text, size 0x48 lma 0x20000000
Start address 0x20000000, load size 72
Transfer rate: 900 bytes/sec, 72 bytes/write.
(gdb) continue
Kod: Zaznacz cały
st-util fu bar
[...]
Listening at *:4242...
Kod: Zaznacz cały
target extended localhost:4242
Kod: Zaznacz cały
load blink_F4.elf
wybrałem F4 -- bo nasz cortex jest 4
następne polecenie powoduje rozpoczęcie wykonywania kodu (ale z możliwością zatrzymania)
Kod: Zaznacz cały
continue
inne polecenia... dokładny opis można uzyskać
Kod: Zaznacz cały
man arm-none-eabi-gdb
[ Dodano: 2012-04-21, 22:46 ]
albo http://sitarz.sdf-eu.org/labs/procedura ... index.html
SpotkanieCNC: STOM-TOOL Marzec 2014
http://www.cnc.info.pl/topics79/spotkan ... t55028.htm
http://www.cnc.info.pl/topics79/spotkan ... t55028.htm
-
- Moderator
-
Lider FORUM (min. 2000)
- Posty w temacie: 21
- Posty: 4463
- Rejestracja: 13 wrz 2008, 22:40
- Lokalizacja: PL,OP
Korzystając z porady Yogi_ zrobiłem arkusz z kombinacją instrukcji warunkowych i dodawania na liczbach całkowitych (czas między krokami w mikrosekundach): rampa4.ods (wykres na przykładzie hamowania).
przykładowe użycie:
for (int k =1; k<20 ; k++){
ramppp(-10000, k* 60, 0, 200, 500, 1000);
ramppp(10000, k* 60, 0, 200, 500, 1000);
}
Jest jeszcze parę drobnych błędów (liczba kroków całej rampy i brak wyliczenia prędkości startu) z powodu których działa dobrze tylko hamowanie:
http://youtu.be/vahPeqZsCB0
Wcześniej były zbyt duże uderzenia na początku rampy hamowania i końcu przyspieszania:
http://youtu.be/Q-80IXh8vf4
Kod: Zaznacz cały
// rampa opracowana metodą przyrostu przyrostu
void ramppp(int steps, int KR1, int KR2, int KR3, int usmax, int usmin){
int przerwa=0; //
int PR=0; // przyrost
int pip = 20; // 20us - impuls step
int dir = (steps > 0)? HIGH:LOW;
steps = abs(steps); // wyciągnięcie kierunku z podanej liczby kroków.
digitalWrite(DIR_PIN,dir); // ustaw kierunek
// pętla przyspieszanie
int poziomo = steps - 2 * (KR3 + 4 * KR1 + 2 * KR2) ;
PR = 0;
for(int KR = 1; KR < (KR3 + 4 * KR1 + 2 * KR2); KR++){
PR = PR + 1; // etap1
if ( KR > KR1 ) {PR = PR + 1 ; } ; // etap2
if ( KR > ( KR1 + KR2) ) {PR = PR + 1 ; } ; // etap3
if ( KR > ( 2 * KR1 + KR2 ) ) {PR = PR + 1 ; } ; // etap4
if ( KR > ( 2 * KR1 + KR2 + KR3 ) ) {PR = PR + 1 ; } ; //etap5
if ( KR > ( 3 * KR1 + KR2 + KR3 ) ) {PR = PR + 1 ; } ; //etap6
if ( KR > ( 3 * KR1 + 2* KR2 + KR3 ) ) {PR = PR + 1 ; } ; //etap7
przerwa = usmin - PR ;
if ( przerwa < usmax ) { przerwa = usmax ; } ;
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(pip);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(przerwa);
}
// jazda na pełnej prędkości
for(int FF = 1; FF < poziomo ; FF++ ){
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(pip);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(przerwa);
}
// pętla hamowania
PR = 0;
for(int KR = 1; KR < (KR3 + 4*KR1 + 2*KR2); KR++){
PR = PR + 1; // etap1
if ( KR > KR1 ) {PR = PR + 1 ; } ; // etap2
if ( KR > ( KR1 + KR2) ) {PR = PR + 1 ; } ; // etap3
if ( KR > ( 2 * KR1 + KR2 ) ) {PR = PR + 1 ; } ; // etap4
if ( KR > ( 2 * KR1 + KR2 + KR3 ) ) {PR = PR + 1 ; } ; //etap5
if ( KR > ( 3 * KR1 + KR2 + KR3 ) ) {PR = PR + 1 ; } ; //etap6
if ( KR > ( 3 * KR1 + 2* KR2 + KR3 ) ) {PR = PR + 1 ; } ; //etap7
przerwa = PR + usmax ;
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(pip);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(przerwa);
}
for (int k =1; k<20 ; k++){
ramppp(-10000, k* 60, 0, 200, 500, 1000);
ramppp(10000, k* 60, 0, 200, 500, 1000);
}
Jest jeszcze parę drobnych błędów (liczba kroków całej rampy i brak wyliczenia prędkości startu) z powodu których działa dobrze tylko hamowanie:
http://youtu.be/vahPeqZsCB0
Wcześniej były zbyt duże uderzenia na początku rampy hamowania i końcu przyspieszania:
http://youtu.be/Q-80IXh8vf4
zachowanie spokoju oznacza zdolności do działania
ᐃ 🜂 ⃤ ꕔ △ 𐊅 ∆ ▵ ߡ
ᐃ 🜂 ⃤ ꕔ △ 𐊅 ∆ ▵ ߡ
-
- ELITA FORUM (min. 1000)
- Posty w temacie: 21
- Posty: 1701
- Rejestracja: 17 mar 2006, 08:57
- Lokalizacja: Gdańsk
blue_17 pisze:Może kolega pokazać jeszcze jak debbugować pod linuxem dla pełności opisu
Kolega markcomp77 robi debuggowanie na "twardziela". Nie lepiej odpalić Eclipse'a albo Rowley Crossworks ( też jest po linuksa)
http://linuxfreak.pl/elektronika/debugg ... slackware/
http://www.yagarto.de/
http://www.rowley.co.uk/arm/releases.htm ( wymaga licencji - można dostać na 30 dni)
-
Autor tematu - Lider FORUM (min. 2000)
- Posty w temacie: 64
- Posty: 3962
- Rejestracja: 18 wrz 2004, 12:51
- Lokalizacja: k/w-wy
- Kontakt:
środowisko pracy za free i do nieszkodliwej zabawyjarekk pisze:Kolega markcomp77 robi

zainstalowałem CrossStudio for ARM 2.2 - robi niezłe wrażenie... jeszcze nie aktywowałem tych 30dni
jednak - cena aktywacji bezterminowej jest powalająca... i raczej zniechęca do tracenia czasu na oprogramowanie na, które nie będę chciał przeznaczyć tylu środków...
wciąż podoba mi się to "twarde" odpalanie...
pobawię się jutro tym opisem z linku pierwszego...
http://linuxfreak.pl/elektronika/debugg ... slackware/
---
dotarł też do mnie Arduino -- więc dołączę do testów w realu kodu kolegi pitsa
SpotkanieCNC: STOM-TOOL Marzec 2014
http://www.cnc.info.pl/topics79/spotkan ... t55028.htm
http://www.cnc.info.pl/topics79/spotkan ... t55028.htm
-
- Moderator
-
Lider FORUM (min. 2000)
- Posty w temacie: 21
- Posty: 4463
- Rejestracja: 13 wrz 2008, 22:40
- Lokalizacja: PL,OP
Rampy w Arduino ciąg dalszy.
Tym razem inna prosta metoda i szybka rampa bez zbędnego bujania się na małej prędkości. W rampie są oba przegięcia, o których była wcześniej mowa. Do funkcji wykonującej rampę podaję trzy parametry:
przerwa_startowa - np. 10000 mikrosekund - odpowiada to około 4 obr/minutę
przerwa_przelotu - np. 50 mikrosekund - ponad 600 obr/minutę
wspolczynnik_lagodnosci - liczba całkowita od 3 (ostro) do 8 (łagodnie)
Przerwę między krokami zmniejszam zaczynając od przerwy startowej o wartość wyliczoną wzorem:
int ( aktualna_przerwa - przerwa_przelotu ) / wspolczynnik_lagodnosci ) + 1
aż do osiągnięcia przerwy równej przerwie przelotu.
Obliczenia i wykres prędkości i przyspieszeń tutaj: rampa5.ods.
Rampa jest symetryczna - przerwy podczas startu są zapamiętywane w tabeli przerw i przy lądowaniu odtwarzane.
przykładowe użycie:
Pełny gotowy kod w załączonym arkuszu kalkulacyjnym: rampa5.ods.
Brakuje jedynie sprawdzenia "czy warto się rozpędzać" gdy podana liczba kroków jest za mała do wejścia na pełne obroty.
Tym razem nie ma co filmować i pokazywać, bo szybko wchodzi na obroty i hamuje.
Ta krótka rampa może być przydatna do wykonywania silnikiem szybkich ruchów po zastąpieniu delayMicroseconds obsługą timera.
Przy współczynniku łagodności 12 wychodzi 80 kroków:

Wykres przedstawia unormowaną prędkość i przyspieszenie. Patrząc od prawej do lewej, schody na przyspieszeniu są związane ze zmianą przerwy między krokami kolejno o 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6 itd..
Tym razem inna prosta metoda i szybka rampa bez zbędnego bujania się na małej prędkości. W rampie są oba przegięcia, o których była wcześniej mowa. Do funkcji wykonującej rampę podaję trzy parametry:
przerwa_startowa - np. 10000 mikrosekund - odpowiada to około 4 obr/minutę
przerwa_przelotu - np. 50 mikrosekund - ponad 600 obr/minutę
wspolczynnik_lagodnosci - liczba całkowita od 3 (ostro) do 8 (łagodnie)
Przerwę między krokami zmniejszam zaczynając od przerwy startowej o wartość wyliczoną wzorem:
int ( aktualna_przerwa - przerwa_przelotu ) / wspolczynnik_lagodnosci ) + 1
aż do osiągnięcia przerwy równej przerwie przelotu.
Obliczenia i wykres prędkości i przyspieszeń tutaj: rampa5.ods.
Rampa jest symetryczna - przerwy podczas startu są zapamiętywane w tabeli przerw i przy lądowaniu odtwarzane.
Kod: Zaznacz cały
// rampa metodą podziału przez n
void rampan(int steps, int NN, int usmax, int usmin){
// steps - liczba krokow do wykonania
// NN - parametr podziału, od 3 do 8, 8 - lagodnie, 3 ostro
// usmax - przerwa us przy maksymalnej prędkości
// usmin - przerwa us przy najmniejszej prędkości
int przerwa = usmin; // przerwa początkowa
int poziomo ; // licznik kroków na pełnej prędkości
int licznik=0; // licznik elementów tabeli przerw
int pip = 20; // 20us - impuls step
int dir = (steps > 0)? HIGH:LOW; //
steps = abs(steps); // wyciągnięcie kierunku z podanej liczby kroków.
digitalWrite(DIR_PIN,dir); // ustaw kierunek
// start rampy
do {
licznik = licznik + 1;
przerwa = przerwa - int(( przerwa - usmax ) / NN) - 1 ;
if ( przerwa < usmax ) { przerwa = usmax ; } ;
tabela[licznik] = przerwa ;
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(pip);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(przerwa);
} while(przerwa > usmax) ;
// jazda na pełnej prędkości
poziomo = steps - 2 * licznik;
przerwa=usmax;
for(int FF = 1; FF < poziomo ; FF++ ){
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(pip);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(przerwa);
}
// pętla hamowania
for(int KK = licznik; KK > 1 ; KK-- ){
przerwa=tabela[KK];
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(pip);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(przerwa);
}
}
Kod: Zaznacz cały
rampan(-1600, 8, 100, 10000);
rampan(1600, 8, 100, 10000);
Brakuje jedynie sprawdzenia "czy warto się rozpędzać" gdy podana liczba kroków jest za mała do wejścia na pełne obroty.
Tym razem nie ma co filmować i pokazywać, bo szybko wchodzi na obroty i hamuje.
Ta krótka rampa może być przydatna do wykonywania silnikiem szybkich ruchów po zastąpieniu delayMicroseconds obsługą timera.
Przy współczynniku łagodności 12 wychodzi 80 kroków:

Wykres przedstawia unormowaną prędkość i przyspieszenie. Patrząc od prawej do lewej, schody na przyspieszeniu są związane ze zmianą przerwy między krokami kolejno o 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 6, 6 itd..
zachowanie spokoju oznacza zdolności do działania
ᐃ 🜂 ⃤ ꕔ △ 𐊅 ∆ ▵ ߡ
ᐃ 🜂 ⃤ ꕔ △ 𐊅 ∆ ▵ ߡ