|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Vlado Član
Pridružen-a: Sre 03 Mar 2004 21:35 Prispevkov: 561 Aktiv.: 2.52 Kraj: Ljubljana
|
|
Nazaj na vrh |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 612 Aktiv.: 4.45 Kraj: Vrhnika
|
Objavljeno: Sob Jan 30, 2016 1:38 pm Naslov sporočila: |
|
|
V mislih sem imel PID za nadzor temperature |
|
Nazaj na vrh |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 612 Aktiv.: 4.45 Kraj: Vrhnika
|
Objavljeno: Ned Mar 13, 2016 4:28 pm Naslov sporočila: |
|
|
Imam težave z ATmega32 in RTC DS1307.
Iz SDA in SCL imam dva 10K upora na 5V ter ustrezen kristal na DS1307.
Ure, minute in sekunde mi kaže pravilno, dan, mesec in leto pa ne.
Testiram pa tako, da na uart vnesem čas in datum program to zapiše v DS1307 in potem prebere z njega in mi podatke pošlje nazaj na uart.
Primer, pošljem mu podatke 02112015223344 (02-dan, 11-mesec, 2015-leto, 22-ura, 33-minute, 44-sekunde), odgovori pa mi z 01022011223344 ki pa bi moral biti v istem zaporedju kot ko sem jih poslal jaz. ura je v redu (zadnjih 6 številk - 223344) datum pa je kar nekaj (01022011 ).
Uporabljam knjižnico ds1307clock.lib
Še del programa kjer mislim, da je napaka:
Koda: |
Podatkicas = Mid(podatki_prejeto , 11 , 15) 'podatkicas=02112015223344
Stringtobyte = Mid(podatkicas , 1 , 2) 'dobi dan
_day = Val(stringtobyte)
Stringtobyte = Mid(podatkicas , 3 , 2) 'dobi mesec
_month = Val(stringtobyte)
Stringtobyte = Mid(podatkicas , 7 , 2) 'dobi leto (samo zadnji dve številki: 15)
_year = Val(stringtobyte)
Stringtobyte = Mid(podatkicas , 9 , 2) 'dobi ura
_hour = Val(stringtobyte)
Stringtobyte = Mid(podatkicas , 11 , 2) 'dobi minuta
_min = Val(stringtobyte)
Stringtobyte = Mid(podatkicas , 13 , 2) 'dobi sekunda
_sec = Val(stringtobyte)
Gosub Setdate
Waitms 100
Gosub Settime
Waitms 100
Gosub Getdatetime
If _day < 10 Then
Strday = "0" + Str(_day )
Else
Strday = Str(_day )
End If
If _month < 10 Then
Strmonth = "0" + Str(_month )
Else
Strmonth = Str(_month )
End If
Stryear = "20" + Str(_year )
If _hour < 10 Then
Strhour = "0" + Str(_hour )
Else
Strhour = Str(_hour)
End If
If _min < 10 Then
Strmin = "0" + Str(_min )
Else
Strmin = Str(_min )
End If
If _sec < 10 Then
Strsec = "0" + Str(_sec )
Else
Strsec = Str(_sec )
End If
Print Strday ; Strmonth ; Stryear ; Strhour ; Strmin ; Strsec
Getdatetime:
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 0 ' start address in 1307
I2cstart ' Generate start code
I2cwbyte Ds1307r ' send address
I2crbyte _sec , Ack
I2crbyte _min , Ack ' minute
I2crbyte _hour , Ack ' ure
I2crbyte _day , Ack ' dan
I2crbyte _month , Ack ' mesec
I2crbyte _year , Nack ' leto
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return
Setdate:
_day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 4 ' starting address in 1307
I2cwbyte _day ' dan
I2cwbyte _month ' mesec
I2cwbyte _year ' leto
I2cstop
Waitms 10
Return
Settime:
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 0 ' starting address in 1307
I2cwbyte _sec ' sekunde
I2cwbyte _min ' minute
I2cwbyte _hour ' ure
I2cstop
Waitms 10
Return |
|
|
Nazaj na vrh |
|
|
protoncek Član
Pridružen-a: Sre 31 Jan 2007 9:41 Prispevkov: 9573 Aktiv.: 45.67 Kraj: Mengeš
|
Objavljeno: Ned Mar 13, 2016 5:26 pm Naslov sporočila: |
|
|
Ti imaš dan-mesec-leto. kaj pa "day of week"? Datum je v obliki:
Nedelja (=day of week), 13 (=dan), 3(=mesec) 2016 (leto se računa samo 16).
Nikjer ne vidim, da bi vpisal dan v tednu...posledično si datum vpisal narobe in dobil ven
01022011223344, kar pomeni 01=recimo ponedeljek, 02.20.(20)11, ura=22:33:44.
Glej tabelo v datasheetu, stran 8. Saj vpisuješ prav (no, ne vpišeš dneva, ampak na prave adrese), samo pri branju preskočiš "day of week"...
Dan v tednu je od 1 do 7, kaj je kaj, določiš sam, jaz ponavadi rečem, da je 1 ponedeljek, 7 pa nedelja (dan se pri nas začne s ponedeljkom). |
|
Nazaj na vrh |
|
|
joze Član
Pridružen-a: Pet 26 Jan 2007 10:27 Prispevkov: 200 Aktiv.: 0.95
|
Objavljeno: Ned Mar 13, 2016 7:02 pm Naslov sporočila: |
|
|
Dan v tednu je od 1 do 7, kaj je kaj, določiš sam, jaz ponavadi rečem, da je 1 ponedeljek, 7 pa nedelja (dan se pri nas začne s ponedeljkom).
Kako določiš sam, kaj ni vezan na datum (dan)?
Če pogledaš na kolendar za določeni datum (dan), vidiš kateri dan v tednu je.
Se motim? |
|
Nazaj na vrh |
|
|
vilko Član
Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3351 Aktiv.: 15.04 Kraj: Dragomer
|
Objavljeno: Ned Mar 13, 2016 7:19 pm Naslov sporočila: |
|
|
joze je napisal/a: |
Dan v tednu je od 1 do 7, kaj je kaj, določiš sam, jaz ponavadi rečem, da je 1 ponedeljek, 7 pa nedelja (dan se pri nas začne s ponedeljkom).
Kako določiš sam, kaj ni vezan na datum (dan)?
Če pogledaš na kolendar za določeni datum (dan), vidiš kateri dan v tednu je.
Se motim? |
Nee. Sam s seboj se dogovoriš, kaj pomeni številka med 0 in 6 oziroma med 1 in 7.
RTC samo skrbi, da se ob prelomu dneva števec dvigne za ena, in na koncu prevrne na 0 oziroma 1. Ne vem kako je to pri konkretnem RDT čipu. Osebno uporabljam starega PCF8583 _________________ Prepričan sem, da je inteligentnih bitij v vesolju veliko. A ker so inteligenta, se nam nočejo prikazati. |
|
Nazaj na vrh |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 612 Aktiv.: 4.45 Kraj: Vrhnika
|
Objavljeno: Ned Mar 13, 2016 8:14 pm Naslov sporočila: |
|
|
Ja hvala stvar sedaj deluje
Dodal sem vrstico
Koda: |
I2crbyte _Weekday , Ack |
Koda: |
Getdatetime:
I2cstart ' Generate start code
I2cwbyte Ds1307w ' send address
I2cwbyte 0 ' start address in 1307
I2cstart ' Generate start code
I2cwbyte Ds1307r ' send address
I2crbyte _sec , Ack ' sekunde
I2crbyte _min , Ack ' minute
I2crbyte _hour , Ack ' ure
I2crbyte _Weekday , Ack ' < GLEJ TUKAJ
I2crbyte _day , Ack ' dan
I2crbyte _month , Ack ' mesec
I2crbyte _year , Nack ' leto
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return |
|
|
Nazaj na vrh |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 612 Aktiv.: 4.45 Kraj: Vrhnika
|
Objavljeno: Sob Maj 14, 2016 10:11 am Naslov sporočila: |
|
|
Imam problem z UART komunikacijo dveh mikrokontrolerjev Atmega32.
RX in TX je povezan pravilno. Masa je tudi skupna. Pri obeh enak baud rate 2400 in enaka frekvenca kristala 3,6864MHz.
Če mikrokontroler posebej povežem z računalnikom in na terminalu simuliram ukaze drugega mikrokontrolerja deluje tako kot je treba. Vsak zase delujeta lepo ko pa ju povežem skupaj se nič ne dogaja
Prosim za kakšen nasvet
L.p. Mato |
|
Nazaj na vrh |
|
|
protoncek Član
Pridružen-a: Sre 31 Jan 2007 9:41 Prispevkov: 9573 Aktiv.: 45.67 Kraj: Mengeš
|
Objavljeno: Sob Maj 14, 2016 11:37 am Naslov sporočila: |
|
|
Kako pa imaš napisan program? Imaš sprejem izveden z interruptom (on urxc sprejem_telegrama) ali imaš serial konfiguriran kot "buffered"? Če samo občasno bereš inkey ni v redu, ker tako izgubljaš sprejete znake. Sam avr nima nobenega baferja (no, ima za en znak).
S terminalom poslušaj tisti kontroler, ki naj bi oddajal, če res to počne. |
|
Nazaj na vrh |
|
|
Vlado Član
Pridružen-a: Sre 03 Mar 2004 21:35 Prispevkov: 561 Aktiv.: 2.52 Kraj: Ljubljana
|
Objavljeno: Sob Maj 14, 2016 11:38 am Naslov sporočila: |
|
|
Mato,
brez kode lahko samo ugibamo kje si ga polomil.
Kako sprejemaš podatek (inkey, witkey, input)?? |
|
Nazaj na vrh |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 612 Aktiv.: 4.45 Kraj: Vrhnika
|
Objavljeno: Sob Maj 14, 2016 5:15 pm Naslov sporočila: |
|
|
Z prekinitveno rutino od vilkota
Saj pravim da kontrolerja lepo delujeta ce vsakega posebej priklopim na racunalnik in podatke pisem na roke preko bray terminala. |
|
Nazaj na vrh |
|
|
igo Član
Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3638 Aktiv.: 17.05
|
Objavljeno: Sob Maj 14, 2016 7:15 pm Naslov sporočila: |
|
|
Ti si za hece, ja.
Prilepi oba programa.
Na koncu se bo ugotovilo, da oba MCU-ja samo čakata, da kaj prileti na RX, za začetek komunikacije mora biti pa vsaj eden dovolj nesramežljiv, pogumen in zgovoren, da vpraša tisti znameniti: "Živijo, kako si?" _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 612 Aktiv.: 4.45 Kraj: Vrhnika
|
Objavljeno: Sre Sep 20, 2017 12:01 pm Naslov sporočila: |
|
|
No da malo obudim temo
Potrebujem kakšen nasvet.
Imam nek dolg string podatkov v katerem iščem številko ki bi jo rad zapisal v drugi string. Problem pa je da ta številka ni vedno na istem mestu in ni vedno enako dolga.
Primer kaj bi rad prepisal v drug string (podčrtano):
+CMGR: "REC UNREAD","+38651123456","","14/09/17,21:52:51+08"
+CMGR: "REC READ","+38651123456","","14/09/17,21:52:51+08"
+CMGR: "REC UNREAD","10086","","14/09/17,21:52:51+08" |
|
Nazaj na vrh |
|
|
frenki Moderator
Pridružen-a: Ned 23 Feb 2003 21:26 Prispevkov: 6553 Aktiv.: 29.41 Kraj: Ljubljana (JN76GB)
|
Objavljeno: Sre Sep 20, 2017 1:30 pm Naslov sporočila: |
|
|
Če z instr() poiščeš prvo pojavljanje separatorja polja => "," <= , nato pa od tu dalje naslednje, boš dobil startno pozicijo in dolžino, ki jo z mid() potegneš ven? |
|
Nazaj na vrh |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 612 Aktiv.: 4.45 Kraj: Vrhnika
|
Objavljeno: Sre Sep 20, 2017 6:06 pm Naslov sporočila: |
|
|
Hvala z malo igranja mi je uspelo |
|
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: 70 dni
Powered by phpBB © 2001, 2005 phpBB Group
|