Arduino - projekti, ideje, savjeti, problemi izdvojena tema

poruka: 1.365
|
čitano: 384.065
|
moderatori: DrNasty, pirat, XXX-Man, Lazarus Long, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
Ova tema je sadržajno povezana sa sljedećim temama: Uvod u elektrotehniku (istosmjerna struja)
12 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi
koska182 kaže...

Negdje se je bio podatak da original blink program od arduina zauzima 1000 bajta, a isti AVR blink program manje od 200 bajta.

Da se uštedjeti. Zamjeni digitalRead/digitalWrite u svome kodu, pa javi razliku/uštedu.

 

Pa na to i mislim...

Al prvo ću napraviti program s avr funkcijama, pa kad vidim da sve radi kako treba, ovo ono onda budem prepravio te dijelove gdje koristim pinMode digitalWrite/digitalRead..

No još me zanima na koji način preko rega mogu pokrenuti PWM na određenom pinu...

Malo sam lošiji s tom bit matematikom pa mi nije sve jasno kako treba.

12 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Malo je kompliciranije, jer ima malo više registara koje na početku treba podesiti i obratiti pozornost. i ima više načina generiranja PWM-a.

Baci pogled na datasheet ATmega328p mikrokontrolera i na ova dva linka:

http://maxembedded.com/2011/08/avr-timers-pwm-mode-part-i/

http://maxembedded.com/2012/01/avr-timers-pwm-mode-part-ii/

12 godina
odjavljen
offline
Arduino - projekti, ideje, savjeti, problemi

Gledam tutorijal - https://www.arduino.cc/en/Reference/PortManipulation

Sad mene zanima kako da digitalWrite(PIN_LED_RPM, stateRPMBlink); zamjenim s registriem(bez da moram provjere koristit)?

 
0 0 hvala 0
12 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Morat ces koristit barem jednu provjeru, jer ovisi o varijabli stateRPMBlink da li ces upisat nulu ili jedinicu u registar.

 

#define PIN_LED_RPM PB0 // ovo stavi na početku programa da kompajler zna o kojem pinu se radi...  

if (stateRPMBlink){  //provjeri da li treba upisati nulu ili jedinicu
PORTB |= (1 << PIN_LED_RPM); // pin PB0 high
}
else {
PORTB &= ~(1 << PIN_LED_RPM); // pin PB0 low
}

12 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi

I tako za svaki pin? Bez da se drugi pinovi sjebu?

Valjda će s tom jednom provjerom brže raditi kod.

12 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi

PORTB |= (1 << PIN_LED_RPM);

Ovo maskiranje se zato i koristi da se ostali pinovi ne sjebu.

Taj kod gore ti je zapravo :

 

1 << PIN_LED_RPM   // shift "1" za broj mjesta ovisno koji je pin. pošto koristimo PB0 onda je rezultat toga 0b00000001. Da koristiš npr. PB5 onda bi rezultat bio 0b00010000

 

i onda to sa operacijom or (ili) upisuješ u PORTB registar.  

 

PORTB = PORTB | 0b00000001

 

Ako si imao PORTB vec upisana neka stanja

Npr.

PORTB = 0010 0100

      or 0000 0001

rez je    0010 0101

Znaci promijenio si samo jedan pin...

 

Ako želiš u dva pina istovremeno upisati jedinice jednostavno napišeš:

PORTB |= (1 << PIN_LED_RPM)|(1 << PB5);

 

Kod upisivanja 0 je slična priča samo koristiš funkciju and (i) i napraviš komplement broja.

 

PORTB = PORTB & ~(0b00000001)

 

Ako si imao PORTB vec upisana neka stanja

Npr.

PORTB = 0010 0101

    and 1111 1110

rez je   0010 0100

 

ako malo znaš logičke operacije onda kužiš o čem pričam.

 

 

 

12 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Znam osnove no nikad ih nisam koristio. Predpostavljam da ista stvar vrijedi i ako želim dva pina ugasit u isto vrijeme.

Zahvaljujem se <3

12 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Za pinove na kojima su LED-ice radi, no u setupu sam zamjenio pinmode funkciju i sad su mi se tipke izmješale. Jedna tipka radi po više stvari itd..

 

        // PINS 0 - 7 | D7 D6 D5 D4 D3 D2 D1 D0
        // 0 = INPUT ; 1 = OUTPUT
        DDRD = B01100011;

        // PINS 8 - 13 | -- -- D13 D12 D11 D10 D9 D8
        // 0 = INPUT ; 1 = OUTPUT
        DDRB = B00100110;

        // PINS 0 - 7 | D7 D6 D5 D4 D3 D2 D1 D0
        // 0 = LOW ; 1 = HIGH
        // ACTIVATES PULLUP RESISTOR ON PINS 7 & 4
        PORTD = B10010000;

        // PINS 8 - 13 | -- -- D13 D12 D11 D10 D9 D8
        // 0 = LOW ; 1 = HIGH
        // ACTIVATES PULLUP RESISTOR ON PINS 8, 11 & 12
        PORTB = B00011001;  

Ako sam dobro shvatio, pinovi idu obratno.
Pinovi 2 i 3 su INPUT, 12, 11, 8, 7 i 4 su INPUT_PULLUP a ostali su OUTPUT
Poruka je uređivana zadnji put pet 24.8.2018 12:32 (Dex.pwn).
12 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Dobro si shvatio.

Al mi nije jasno kako jedna tipka radi više stvari?

daj dio staroga i novoga koda pa da vidimo dal ima kakve razlike i zabune.

 

12 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi
koska182 kaže...

Dobro si shvatio.

Al mi nije jasno kako jedna tipka radi više stvari?

daj dio staroga i novoga koda pa da vidimo dal ima kakve razlike i zabune.

 

 

https://pastebin.com/AysidYAs

 

Trenutno sam samo pinMode i digitalWrite zamjenio, digitalRead i dalje koristim za tipke.

12 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Ako i dalje koristiš digitalRead za čitanje stanja onda ne vidim gdje je kvaka.

To što jedna tipka radi više stvari je problematika čitanja stanja te tipke i i koda koji se izvršava nakon čitanja stanja.

Btw. PB6 i PB7 ne koristiš? tj. spojen je XTAL. stavi DDRB = B00100110;  PORTB = B00011001;  //outputi samo 9,10,13

 

ili probaj na ovaj način zapisati:

DDRB |= (1 << PB1)|(1 << PB2)|(1 << PB2)|(1 << PB5);

PORTB |= (1 << PB0)|(1 <<PB3)|(1 <<PB4); //pull up na arduino pinu  8,11 i 12

DDRD |= (1 << PD0)|(1 << PD1)|(1 << PD5)|(1 << PD6);

PORTD |= (1 <<PD4 )|(1 << PD7);   //pull up na arduino pinu  4 i 7

 

 

12 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Koliko sam vidio, taj šesti i sedmi bit u PORTB i DDRB mora biti 1

 

Btw. taj kod koji si mi dao, stavio sam ga ali ni jedna tipka ne reagira.

Poruka je uređivana zadnji put pet 24.8.2018 14:55 (Dex.pwn).
12 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Koliko sam vidio, taj šesti i sedmi bit u PORTB i DDRB mora biti 1

stranica 105 datasheeta  ATmega328:

"If PB7 is used as a clock pin, DDB7, PORTB7 and PINB7 will all read 0."

Al to možda nema ni utjecaja.

Btw. taj kod koji si mi dao, stavio sam ga ali ni jedna tipka ne reagira.

Možda arduino IDE ne razumije PB0, PB1, ...

zapiši onda ovako:

DDRB |= (1 << 1)|(1 << 2)|(1 << 5);

PORTB |= (1 << 0)|(1 <<3)|(1 <<4); //pull up na arduino pinu  8,11 i 12

DDRD |= (1 << 0)|(1 << 1)|(1 << 5)|(1 << 6);

PORTD |= (1 <<4 )|(1 << 7);   //pull up na arduino pinu  4 i 7

 

 

 

12 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi

I dalje isto..

12 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Neznam onda u čemu je kvaka...

Iskreno nisam nikad pisao avr kod u arduino okruženju.

 

DDRD = B01100011;

trebalo bi biti isto što i:

DDRD |= (1 << 0)|(1 << 1)|(1 << 5)|(1 << 6);

DDRB = B11100110;

trebalo bi biti isto što i:

DDRB |= (1 << 1)|(1 << 2)|(1 << 5);
PORTD = B10010000;
trebalo bi biti isto što i:
PORTD |= (1 <<4 )|(1 << 7);
PORTB = B11011001;
trebalo bi biti isto što i:
PORTB |= (1 << 0)|(1 <<3)|(1 <<4);

 

probaj zamjeniti  "DDRD |=" u "DDRD ="

Poruka je uređivana zadnji put pet 24.8.2018 16:13 (koska182).
12 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Opet ništa.. Vidjet ću malo po netu dal još netko zna...

 

Samo sekund, dali kod digitalReada ima utjecaj dal je pin definiran kao PB4 ili 12?

 

#define PIN_BTN_SCR_CONTROL                                                     PB0 // D8
#define PIN_BTN_LIGHTS                                                          PD4 // D4
#define PIN_BTN_HIGH_BEAM                                                       PB3 // D11
#define PIN_BTN_LEFT_TS                                                         PD7 // D7
#define PIN_BTN_RIGHT_TS                                                        PB4 // D12

#define PIN_LED_TAIL1                                                           PB1 // D9
#define PIN_LED_LEFT_TS                                                         PB5 // D13 - ONLY OUTPUT PIN!
#define PIN_LED_RIGHT_TS                                                        PD0 // D0/RX
#define PIN_LED_TAIL2                                                           PD5 // D5
#define PIN_LED_HEAD1                                                           PB2 // D10
#define PIN_LED_HEAD2                                                           PD1 // 1/TX
#define PIN_LED_RPM                                                             PD6 // D6

 

 

Tako sam definirao pinove

Poruka je uređivana zadnji put pet 24.8.2018 16:14 (Dex.pwn).
12 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Javi ovdje ako nađeš riješenje. sad i mene zanima.

12 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Uredio sam gornji post, izgleda da je do oznaka bilo. Kad sam vratio na staro tad tipke rade, jedino se LEDica na D13 može upaliti ako imam PB5 oznaku

 

Btw, do oznaka je bilo jer i dalje koristim digitalRead.

Sad me zanima kako taj digitalRead zamjeniti.

Našao sam ovaj način no ne razumijem na koji način se računa kakav rezultat mora bit

 

(PINB & B00000100)==4

 

Piše ovo ali i dalje ne razumijem

 

On serial monitor if you want to see the result Serial.println((PINB&B00000001)); will appear 1 because is 20.

If you move the button on pin 10 the operation will be PINB & B00000100; and the result will be 4 means 22.

Poruka je uređivana zadnji put pet 24.8.2018 16:26 (Dex.pwn).
12 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi

PINB je 8 bitni registar iz kojeg možeš samo čitati i u njemu su pohranjena stanja na pinovima.

 

npr. ako ti je PB3 i PB4 high a svi ostali u low, onda ti je PINB == B00011000

tebe samo zanima stanje pina PB3 onda ces maskirati ostale bitove u registru 

PINB&B00001000 i taj rezulatat ce biti ili 0b00001000 ili 0b00000000, ovisno o stanju PB3. Znači rezultat ti je ili 8 (binarno 00001000) ili 0 (binarno 00000000).

Ali tebi nije bitan rezultat nego samo dal je nula ili nije nula.

 

if (PINB&B00001000){

kod ako je pin jedan

}

 

ali ako koristiš tipkala sa unutarnjim pull-upom onda trebaš provjeravati dal je nula:

 

if (!(PINB & B00001000)){    // ili if(!(PINB & (1<<PB3))){

kod ako je pin nula

}

12 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi
To je to onda.. Još samo interruptove drugačije napisat
Hvala ti
12 godina
neaktivan
offline
Arduino - projekti, ideje, savjeti, problemi

Umjesto petljanja s DDR i PIN registrima, evo kako sam ja to riješio:

 

https://github.com/paradajz/core/blob/master/src/HAL/avr/PinManipulation.h

 

Kod koristi određene trikove (dokumentirano) tako da je moguće definirati pin na sljedeći način:

 

#define INPUT_1_PORT PORTB

#define INPUT_1_PIN  1

 

I onda u kodu:

 

setInput(INPUT_1_PORT , INPUT_1_PIN);

setHigh(INPUT_1_PORT , INPUT_1_PIN);


...

 

bool pinState = readPin(INPUT_1_PORT, INPUT_1_PIN);

Poruka je uređivana zadnji put pet 24.8.2018 18:51 (paradajz).
 
2 0 hvala 1
7 godina
neaktivan
offline
Arduino - projekti, ideje, savjeti, problemi

Pozdrav ekipa,

 

trazim osobu koja bi mi mogla isprogramirati arduino sklop, i napraviti shemu u nekom programu. Vremenski ne stižem to odraditi, a potrebno mi je za jedan zadatak. Imam potreban materijal i sve komponente, ukoliko ce biti potrebno jos nesto kupiti, nije problem. Tko se bavi time u slobodno vrijeme mislim da mu nebi trebalo puno vremena, ja nisam previse u tome i trebalo bi mi dosta vremena da to napravim, a jednostavno nemam kad. Ukoliko ima zainteresiranih javite se na PM, da se dalje dogovorimo...

 

 

 

 
0 0 hvala 0
12 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi
Napiši ovdje sve, ništa preko pma
7 godina
neaktivan
offline
Re: Arduino - projekti, ideje, savjeti, problemi
Dex.pwn kaže...
Napiši ovdje sve, ništa preko pma

 Radi se o električnoj bravi(simulacija sa servo motorom) kontroliranoj preko arduino aplikacije(wifi), keyboard-a, RFID kartice i prikaza na lcd-u(16x2). Postoji mogucnost dosta odstupanja pri izradi.

 

Tko misli da moze tako nesto napraviti neka se javi na PM radi daljnjeg dogovora...

14 godina
offline
Arduino - projekti, ideje, savjeti, problemi

Istopila mi se zaliha arduina pa moram nesto naruciti.

Nisam u zadnje vrijeme bas pratio kako se stvari krecu pa me zanima dal ima tko kakvu preporuku?(ako ima nesto novo zanimljivo)

Mislio sam ovako:

10x Nano

2x Uno

1x Due

1x Mega

 

Preporuka nekih senzora s kojima bi mogao rjesiti autonomno kretanje

I neki modul s dobrim rangeom za bezicnu komunikaciju bez velike latencije(200tinjak metara bez prepreka)

Moj PC  
0 0 hvala 0
12 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi
Stm32 ne bi uzeo?

Btw čitao sam malo o Stm32 i kažu da nema eeprom. Pa me zanima dali je netko koristio ds3231 i njegov eeprom? Tražim po netu library koji ima rtc i eeprom funkcije ali ne mogu pronaći. Treba mi oko 150 bajtova u koje bi spremao postavke i kilometražu/statistiku
Poruka je uređivana zadnji put uto 25.9.2018 1:42 (Dex.pwn).
12 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Ako imaš stm32 vjerojatno ti ne treba vanjski rtc, jer imaš ugrađen rtc u čipu. 

A za eeprom imaš dvije mogucnosti. Prva je emuliranje EEPROM-a u Flash memoriji (guglaj "Application note AN2594"). 

Druga je koristit vanjski eeprom. Ako koristiš HAL drivere za STM32 onda je library veoma jednostavan, jer pisanje i čitanje iz eeproma je jednostavno. (https://github.com/nimaltd/EEPROM24xx)

ako koristiš vanjski i rtc i eeprom, onda ce ti trebati dva library-a jedan za rtc, a drugi za eeprom. osim što koriste isti I2C bus, nemaju baš puno toga zajedničko.

12 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi
Čuo sam da je ta emulacija loša za pločicu pa bi to izbjegao.
Rtc koristim jer ga nano nema, a ne znam kako bi kod stm32 radio kad ga skroz isključim iz struje.
Za HAL prvi put čujem. Jutros sam do četiri tražio kod po netu za AT24C32 EEPROM i sklopio sam nešto što radi tak da mi to više nije problem
Poruka je uređivana zadnji put uto 25.9.2018 12:41 (Dex.pwn).
12 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi

imaš poseban pin za Vbat za napajanje rtc-a i još nekih backup registara.

To ti je pin 1 na STM32F103xx. na to staviš bateriju kao i na svaki drugi rtc i nemaš problema sa isključivanjem. 

Emulacija je štetna za pločicu ovisno o tome kolko puta pišeš i brišeš. može izdržati do 10000 ciklusa.

Ako prvi put cujes za HAL drivere, pogledaj malo tutoriale. lijepo se olakša pisanje koda za STM32. možda ti se svidi...

14 godina
offline
Re: Arduino - projekti, ideje, savjeti, problemi
CroNk3r kaže...

Istopila mi se zaliha arduina pa moram nesto naruciti.

Naruči pločicu sa ESP32, odnosno sa WROOM32 modulom. Na ebayu ima TTGO, koji je klon Adafruit Feathera.

 

Ima 4Mb flash, 520 KB memorije, dual core procesor na 160Mhz (ide do 240Mhz),

3 UARTa, WiFi, Bluetooth (BLE i Classic), 12 bitni ADC sa 18 kanala, 2 x 8bit DAC, touch senzore, i2S, i2C, 8 kanalnu RMT periferiju za primanje i slanje IR signala,

dvije SPI sabirnice (pa može biti master i slave u isto vrijeme), eMMC kontroler za SD karticu (da ti ostane slobodan SPI).

 

Još ima i GPIO matrix pa periferiju alociraš na GPIO koji ti paše, a hardver odrađuje svoje preko DMA kanala.

I ULP coprocesor pa ga baciš u deep sleep i probudiš na tajmer, temperaturu ili interrupt.

 

Još podržava i enkripciju pa si možeš enkriptirati flash da ti netko ne ukrade firmware.

 

Preodličan čip, Nano mu nemože ni prismrditi, a devboard se da nabaviti za 4.5$.

 

Otpisao sam AVR i totalno se prebacio na ESP32.

Naučio sam ESP-IDF dok je Arduino support kaskao ali sad je sređena podrška pa toplo preporučujem.

 

Koristim ga za Bluetooth zvučnik sa vanjskim 24bitnim DACom na I2S sabirnici. Postoji i WiFI webradio za njega.

A uskoro dolazi i službeni softverski MP3 dekoder pa ću moći puštati MP3ce sa SD kartice.

Poruka je uređivana zadnji put uto 25.9.2018 18:59 (Alkaline).
Ova tema je sadržajno povezana sa sljedećim temama: Uvod u elektrotehniku (istosmjerna struja)
Nova poruka
E-mail:
Lozinka:
 
vrh stranice