|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
poldim Član
Pridružen-a: Sre 02 Mar 2011 11:34 Prispevkov: 104 Aktiv.: 0.65 Kraj: Ormož
|
Objavljeno: Pet Feb 01, 2019 4:29 pm Naslov sporočila: Arduino Uno in RTC DS1302 |
|
|
Pozdravljeni.
Sem začetnik na Arduinu. Z njim bi želel izdelati čebelarsko tehtnico. V bistvu mi sama tehtnica že deluje. Težave so nastopile, ko želim tehtnico povezati z zunanjim svetom.
Na internetu je ohromno primerov a mi noben od njih ne deluje. Napak pa ne najdem.
Za tehtnico uporabljam Arduino Uno (kitajska), tehtalni modul 200kg z HX711 (A/D 64bit), LCD 16x2, ter senzor temperature, tlaka in vlage BME280. Ta kombinacija komponent mi deluje dobro.
Dodati želim še RTC DS1302 in GSM800L. Iz interneta sem preizkusil veliko primerov za RTC DS1302, vendar mi nobeden ne deluje. Napake ne najdem. Podobno je pri GSM modulu.
DS1302 imam povezan na porte 5, 6 in 7. Ostale porte imam že zasedene ali rezervirane za druge komponente.
Prosim vas, če mi lahko kdo pomaga s kakšnim delujočim primerom.
|
|
Nazaj na vrh |
|
|
polkic Član
Pridružen-a: Pon 04 Dec 2017 20:27 Prispevkov: 68 Aktiv.: 0.87
|
Objavljeno: Pet Feb 01, 2019 5:34 pm Naslov sporočila: |
|
|
Pozdravljen,
objavi trenutno kodo programa in mogoče kakšno shemo vezave, da ti bomo lahko lažje svetovali.
Lp.
|
|
Nazaj na vrh |
|
|
poldim Član
Pridružen-a: Sre 02 Mar 2011 11:34 Prispevkov: 104 Aktiv.: 0.65 Kraj: Ormož
|
Objavljeno: Pet Feb 01, 2019 9:32 pm Naslov sporočila: |
|
|
polkic je napisal/a: |
Pozdravljen,
objavi trenutno kodo programa in mogoče kakšno shemo vezave, da ti bomo lahko lažje svetovali.
Lp. |
Pozdravljeni. prilagam kodo programa za branje in prikaz ure na LCD in napake, ki so sem jih dobil pri prevajanju programa. Originalni primer sem popravil v smislu popravka pinov. Upam, da tu nisem naredil kake napake.
Program izgleda tako:
_________________________________________________________________
Koda: |
// DS1302_LCD (C)2010 Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
//
// Adopted for DS1302RTC library by Timur Maksimov 2014
//
// A quick demo of how to use my DS1302-library to make a quick
// clock using a DS1302 and a 16x2 LCD.
//
// I assume you know how to connect the DS1302 and LCD.
// DS1302: CE pin -> Arduino Digital 5
// I/O pin -> Arduino Digital 6
// SCLK pin -> Arduino Digital 7
// VCC pin -> Arduino Digital 33
// GND pin -> Arduino Digital 35
// LCD: DB7 -> Arduino Digital 13
// DB6 -> Arduino Digital 12
// DB5 -> Arduino Digital 11
// DB4 -> Arduino Digital 10
// E -> Arduino Digital 9
// RS -> Arduino Digital 8
#include <Wire.h> // Need for NewLiquidCrystal library
#include <LiquidCrystal.h>
#include <DS1302RTC.h>
#include <Time.h>
// Init the DS1302
// Set pins: CE, IO,CLK
DS1302RTC RTC(7, 6, 5);
// Optional connection for RTC module
//#define DS1302_GND_PIN 33 - not for UNO
//#define DS1302_VCC_PIN 35 - not for UNO
// Init the LCD
// initialize the library with the numbers of the interface pins
// lcd(RS, E, d4, d5, d6, d7, [slovenščina je zame španska vas], polarity)
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
void setup()
{
// Setup LCD to 16x2 characters
lcd.begin(16, 2);
// Activate RTC module
// digitalWrite(DS1302_GND_PIN, LOW); - not for UNO
// pinMode(DS1302_GND_PIN, OUTPUT); - not for UNO
// digitalWrite(DS1302_VCC_PIN, HIGH); - not for UNO
// pinMode(DS1302_VCC_PIN, OUTPUT); - not for UNO
lcd.print("RTC activated");
delay(500);
lcd.clear();
//setSyncProvider(RTC.get); // the function to get the time from the RTC
if (RTC.haltRTC())
lcd.print("Clock stopped!");
else
lcd.print("Clock working.");
lcd.setCursor(0,1);
if (RTC.writeEN())
lcd.print("Write allowed.");
else
lcd.print("Write protected.");
delay ( 2000 );
// Setup time library
lcd.clear();
lcd.print("RTC Sync");
setSyncProvider(RTC.get); // the function to get the time from the RTC
if(timeStatus() == timeSet)
lcd.print(" Ok!");
else
lcd.print(" FAIL!");
delay ( 2000 );
lcd.clear();
}
void loop()
{
static int sday = 0; // Saved day number for change check
// Display time centered on the upper line
lcd.setCursor(3, 0);
print2digits(hour());
lcd.print(" ");
print2digits(minute());
lcd.print(" ");
print2digits(second());
// Update in 00:00:00 hour only
if(sday != day()) {
// Display abbreviated Day-of-Week in the lower left corner
lcd.setCursor(0, 1);
lcd.print(dayShortStr(weekday()));
// Display date in the lower right corner
lcd.setCursor(5, 1);
lcd.print(" ");
print2digits(day());
lcd.print("/");
print2digits(month());
lcd.print("/");
lcd.print(year());
}
// Warning!
if(timeStatus() != timeSet) {
lcd.setCursor(0, 1);
lcd.print(F("RTC ERROR: SYNC!"));
}
// Save day number
sday = day();
// Wait small time before repeating :)
delay (100);
}
void print2digits(int number) {
if (number >= 0 && number < 10) {
lcd.write('_');
}
lcd.print(number);
} |
Opis: |
|
Velikost datoteke: |
152.67 KB |
Pogledana: |
5 krat |
|
Opis: |
Napake, ki so se pojavile pri kompajliranju. |
|
Download |
Ime datoteke: |
DS1302_LCD_napake.txt |
Velikost datoteke: |
2.88 KB |
Downloadano: |
11 krat |
Nazadnje urejal/a poldim Pet Feb 01, 2019 10:45 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
|
solomojster Član
Pridružen-a: Tor 18 Maj 2010 12:26 Prispevkov: 845 Aktiv.: 4.98 Kraj: NOVA GORICA
|
|
Nazaj na vrh |
|
|
igo Član
Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3638 Aktiv.: 17.04
|
Objavljeno: Sob Feb 02, 2019 1:33 am Naslov sporočila: |
|
|
Knjižnica mora vsebovati dve datoteki z enakim imenom, a različnima končnicama: .c (ali .cpp) in .h . Tudi mapa mapa imeti enako ime kot obe datoteki.
Kup napak v zvezi z nedefiniranimi spremenljivkami je verjetno povezan z manjkajočo .h datoteko.
Hkrati pa sta najdeni 2 knjižnici s podobnim imenom.
Ali si kaj brisal v zvezi z DS1302? Poišči vse datoteke s 1302 v imenu in preveri, kaj paše skupaj.
Najbolje je dodati .c in .h datoteki od vseh uporabljanih knjižnic kar v mapo s skico.ino .
_________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
|
poldim Član
Pridružen-a: Sre 02 Mar 2011 11:34 Prispevkov: 104 Aktiv.: 0.65 Kraj: Ormož
|
Objavljeno: Sob Feb 02, 2019 9:41 am Naslov sporočila: |
|
|
Hvala za predloga, danes popoldne preizkusim.
Obstaja možnost, da sem pri nalaganju različnih primerov kako knjižnico podvojil ali prepisal. Bom preveril knjižnice.
Sporočim kakšno je stanje.
|
|
Nazaj na vrh |
|
|
Krampus Član
Pridružen-a: Pon 08 Sep 2008 13:07 Prispevkov: 1826 Aktiv.: 9.60
|
Objavljeno: Ned Feb 03, 2019 6:08 pm Naslov sporočila: |
|
|
Zdravo
Imaš tudi drugo varianto, če te slučajno piči
Nekaj, kar C verniki ne smejo videti
_________________ Nisem ravno najbolj pameten na svetu, tu in tam pa imam kakšno idejo. |
|
Nazaj na vrh |
|
|
poldim Član
Pridružen-a: Sre 02 Mar 2011 11:34 Prispevkov: 104 Aktiv.: 0.65 Kraj: Ormož
|
Objavljeno: Pon Feb 04, 2019 1:46 am Naslov sporočila: |
|
|
Zdravo,
kaj si to novega odkril, rabim nekaj podnapisov.
Jaz sem na forumu malo zaspal, pa sem izgleda določene zadeve spregledal.
|
|
Nazaj na vrh |
|
|
poldim Član
Pridružen-a: Sre 02 Mar 2011 11:34 Prispevkov: 104 Aktiv.: 0.65 Kraj: Ormož
|
Objavljeno: Pon Feb 04, 2019 2:03 am Naslov sporočila: |
|
|
Hvala za dober primer. To je najenostavnejši primer, kar sem jih preizkusil. Deloval je iz prve. Moral sem ga vkomponirati v svoj program, in sedaj je rezultat pozitiven. Ostaja mi samo še to, da usposobim GSM 800L.
Ima kdo kakšen predlog za najenostavnejšo povezavo GSM modula (SIM800L)?
Pini na GSM modulu so: TxD, RxD, (RST ne vem če ga potrebujem?).
Na Arduino Uno imam na razpolago naslednje pine:
0-(RX), 1-(TX), A2, SCL, SDA in AREF.
Za dosedanjo pomoč se iskreno zahvaljujem, če pa je še kdo pripravljen z mano deliti kakšen nasvet, pa se priporočam.
|
|
Nazaj na vrh |
|
|
gustinmi Član
Pridružen-a: Tor 26 Feb 2019 13:41 Prispevkov: 14 Aktiv.: 0.22
|
Objavljeno: Tor Feb 26, 2019 2:00 pm Naslov sporočila: |
|
|
Tvoj GSM modul uporablja serijski UART (torej ne I2C ali SPI!!). Torej potrebuješ pine TX in RX. RST je zato, da modul zresetiraš, da se ponovne zažene. Z modulom komuniciraš preko AT komand; če jih ne poznaš ti svetujem, da modul priklučiš preko USB to TTL kabla na računalnik in uporabljaš kakšen terminal emulator, da se naučiš AT komand in najprej komuniciraš z modulom preko Windows-ov. Vsaj toliko, da znaš preveriti, če se poveže na ponudika mobilne telefonije, in če znaš poslati SMS.
Preveri npr. https://www.electroschematics.com/13548/introducingsim800l/
Morda bi ti bilo lažje, če bi za začetek podatke pošiljal preko WiFi konektorja npr. ESP8266.
Obedve zadevi nista ravno za začetnike, še najbolj je pomembno poznavanje C++
|
|
Nazaj na vrh |
|
|
gustinmi Član
Pridružen-a: Tor 26 Feb 2019 13:41 Prispevkov: 14 Aktiv.: 0.22
|
Objavljeno: Tor Feb 26, 2019 2:14 pm Naslov sporočila: |
|
|
Pa še to: za realtime uro za začetek razvij svojo programsko. Imej timer prekinitev, ki se zgodi npr. vsak milisekundo in povečuje milisekunde, nato sekunde, nato minute in tako naprej. Izogibaj se ukaza DELAY, saj ustavi celotni program (torej vse čaka).
Zelo učinkovito boš lahko programiral na spodnji način (ti pa bo vzelo nekaj časa za naučiti se) : tukaj LED utripa glede na kristal, ki poganja procesor :
Koda: |
#define ledPin 2
void setup()
{
pinMode(ledPin, OUTPUT);
// initialize timer1
noInterrupts(); // disable all interrupts
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 34286; // preload timer 65536-16MHz/256/2Hz
TCCR1B |= (1 << CS12); // 256 prescaler
TIMSK1 |= (1 << TOIE1); // enable timer overflow interrupt
interrupts(); // enable all interrupts
}
ISR(TIMER1_OVF_vect) // interrupt service routine that wraps a user defined function supplied by attachInterrupt
{
TCNT1 = 34286; // preload timer
digitalWrite(ledPin, digitalRead(ledPin) ^ 1);
}
void loop()
{
// if you put "timer" routine here, with delay, it will not be precise, because the execution time for the code inside loop will always be added
} |
https://www.robotshop.com/community/forum/t/arduino-101-timers-and-interrupts/13072
|
|
Nazaj na vrh |
|
|
poldim Član
Pridružen-a: Sre 02 Mar 2011 11:34 Prispevkov: 104 Aktiv.: 0.65 Kraj: Ormož
|
Objavljeno: Čet Feb 28, 2019 7:39 am Naslov sporočila: |
|
|
Hvala za predloga.
Vprašanje branja RTC DS1302 se uspel rešiti. sedaj imam pa še vedno odprto vprašanje GSM modula.
Ker sem za aplikacijo uporabil Arduino UNO, sem precej omejen z pomnilnikom. trenutno sem s tehtnico na 80% dinamičnega pomnilnika, kar pa je že zgornja meja za procesor.
Sedaj čakam na MEGA in takrat se lotim še GSM Modula.
GSM modil SIM 800 sem že testiral preko serijskega vmesnika in terminala in tudi z Arduino NANO. Branje in pisanje preko terminala mi ni problem, moral pa bom naštuditati še obdelavo SMS sporočil.
Še enkrat hvala za pomoč. Ko bom ponovno v Škripcih se oglasim.
|
|
Nazaj na vrh |
|
|
poldim Član
Pridružen-a: Sre 02 Mar 2011 11:34 Prispevkov: 104 Aktiv.: 0.65 Kraj: Ormož
|
Objavljeno: Sob Mar 02, 2019 9:03 am Naslov sporočila: |
|
|
Naletel sem še na eno težavo. Ko Arduino UNO priključim na napajanje preko vtičnice za napajanje, se program v modulu noče zagnati. Pritisniti moram tipko za RESET in takrat se program zažene.
Če modul priključim preko USB vhoda z navadnim napajalnikom za telefon pa se normalno zažene.
Kje je tu razlika in kaj moram narediti, da se mi bo program zagnal tudi ob vklopu eksternega napajanja (vtičnice za napajanje)?
|
|
Nazaj na vrh |
|
|
Peter123 Član
Pridružen-a: Tor 13 Jan 2009 15:34 Prispevkov: 1366 Aktiv.: 7.34 Kraj: Lj.
|
Objavljeno: Sob Mar 02, 2019 9:27 am Naslov sporočila: |
|
|
Pri meni ponavadi traja do 3-4s preden se zažene MCU, če ga napajam preko zunanjega napajalnika. Preko USBja se zažene veliko hitreje.
Razloga nisem raziskoval, mi pojav ni bil moteč.
|
|
Nazaj na vrh |
|
|
poldim Član
Pridružen-a: Sre 02 Mar 2011 11:34 Prispevkov: 104 Aktiv.: 0.65 Kraj: Ormož
|
Objavljeno: Sob Mar 02, 2019 9:37 am Naslov sporočila: |
|
|
Meni se sploh ne zažene, v tem je problem.
Na netu sem zasledil nekaj kot Power on kondenzator na vhodu za reset.
Opis: |
Power on kondenzator za RESET. |
|
Download |
Ime datoteke: |
tOKqg.png |
Velikost datoteke: |
7.05 KB |
Downloadano: |
6 krat |
|
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 76 dni
Powered by phpBB © 2001, 2005 phpBB Group
|