|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
RGorazd Član
Pridružen-a: Čet 20 Maj 2004 15:57 Prispevkov: 1712 Aktiv.: 7.69 Kraj: Ig
|
Objavljeno: Pet Maj 22, 2015 4:45 pm Naslov sporočila: |
|
|
Andro82 je napisal/a: |
Druga težava:
Merjenje temperature s petimi senzorji DS18b20. Zaradi konverzije je potrebna sekunda zakasnitve. S tipkami nastavljam željeno temperaturo problem pa je, ker tipka zaradi potrebne zakasnitve sedaj ni več dovolj odzivna.
Hvala za pomoč!
LP, Andrej |
Uporabi timer, konfiguriraj ga tako, da ti na 1 s proži prekinitev, ki ti bo periodično klicala vsak DS posebej (spiši svojo subrutino). Ko imaš prebran rezultat, ga izpišeš na LCD, v glavni zanki pa preverjaj tipke, tako ne bo več zadeva neodzivna. Lahko pa narediš obratno. Vsak signal, ki gre iz tipke proti uC, veži še na INT0/INT1 pin. Ko se zgodi zunanja prekinitev, poglej katera tipka jo je sprožila in izvedi del programa, ki je vezan na dotično tipko.
_________________ .
._. _ _ ._. _.__. _|
[ (_](_)[ (_] /_(_]
._| |
|
Nazaj na vrh |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 612 Aktiv.: 4.45 Kraj: Vrhnika
|
Objavljeno: Pon Maj 25, 2015 8:29 pm Naslov sporočila: |
|
|
zdravo poizkušam naslednje pa mi zmeraj meče napako:
Koda: |
Dim A As Byte
Dim B As Byte
Dim C As String * 10
C = "111255abcd"
A = Left(C , 3) 'Rad bi dobil vrednost 111
B = Mid(C,4,6) 'Rad bi dobil vrednost 255
|
Rad bi uporabil pri komunikaciji z PC, da bi iz prejetega stringa dobil številke.
(Upam da se da narediti brez dodatnih spremenljivk ali pa z minimalnim številom, ker imam že skoraj pol SRAM )
|
|
Nazaj na vrh |
|
|
mucek Član
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5333 Aktiv.: 24.73 Kraj: Domzale
|
Objavljeno: Pon Maj 25, 2015 9:07 pm Naslov sporočila: |
|
|
Tudi spremenljivki A in B morata biti deklarirani kot stringa. Left (in druge komande za stringe) lahko uporabljaš le na stringih. Če pa potem hočeš dobiti ven vrednost, pa uporabiš Val:
Koda: |
Dim A As String*5
Dim B As String*5
Dim C As String * 10
Dim A_val as word
C = "111255abcd"
A = Left(C , 3) 'Rad bi dobil vrednost 111
B = Mid(C,4,6) 'Rad bi dobil vrednost 255
A_val = val(A) 'Tu pretvoriš string A v vrednost A_val
|
Če pa je SRAM problem, potem pa skušaj komunikacijo zoptimizirati: namesto, da pošiljaš "111255abcd", bi lahko za vsako vrednost poslal samo en byte (ASCI(111) namesto treh znakov 1)
LP, g
_________________ ...lahko pa se tudi motim ...
Nazadnje urejal/a mucek Pon Maj 25, 2015 9:09 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
|
protoncek Član
Pridružen-a: Sre 31 Jan 2007 9:41 Prispevkov: 9573 Aktiv.: 45.68 Kraj: Mengeš
|
Objavljeno: Pon Maj 25, 2015 9:09 pm Naslov sporočila: |
|
|
Itak da ti javi napako. rezultat ukaza LEFT ali RIGHT je string (preberi HELP!). Mislim, da brez dodatne spremenljivke ne bo šlo:
Koda: |
Dim A As Byte
Dim B As Byte
Dim C As String * 10
Dim C as string * 3
C = "111255abcd"
D = Left(C , 3)
A = Val(D)
D = Mid(C,4,6)
B = Val(D) |
|
|
Nazaj na vrh |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 612 Aktiv.: 4.45 Kraj: Vrhnika
|
Objavljeno: Ned Jun 07, 2015 7:22 pm Naslov sporočila: |
|
|
To pretvarjanje string->byte se mi ne obnese najbolje.
Koda: |
Dim Uart As String * 20
Dim Stringtobyte As String * 4
Dim Izh1set As Byte
Dim Time1 As Word
Uart = "201100"
Do
Stringtobyte = Mid(uart , 3)
Izh1set = Val(stringtobyte)
Stringtobyte = Mid(uart , 4 , 7)
Time1 = Val(stringtobyte)
Print "/izh1set" ; Izh1set ; "/time1" ; Time1
Wait 1
Loop |
Iz stringa uart(201100) bi moral razčleniti 20(tega ne rabim), 1(to vrednost bi morala dobiti spremenljivka stringtobyte), 100(to vrednost bi morala dobiti spremenljivka time1)
Vendar se mi na uart izpiše tole:
Koda: |
/izh1set76/time1100
|
Ni mi jasno kje je spremenljivka izh1set dobila vrednost 76?
|
|
Nazaj na vrh |
|
|
protoncek Član
Pridružen-a: Sre 31 Jan 2007 9:41 Prispevkov: 9573 Aktiv.: 45.68 Kraj: Mengeš
|
Objavljeno: Ned Jun 07, 2015 7:29 pm Naslov sporočila: |
|
|
hm... v stavku
Stringtobyte = Mid(uart , 3)
ti po moje manjka ena številka...
v drugem pa si kompilerju rekel tole:
stringtobyte naj bo del spremenljivke UART, prvi zank naj bo četrti, potem vzemi sedem znakov od tam.
PAZI! Prva številka je prvi string, ki ga hočeš, druga pa NI zadnji string, ampak je ŠTEVILO znakov, ki jih hočeš zajeti. Torej bolj takole:
Stringtobyte = Mid(uart , 3,4) : prvi znak je tretji (to je enica), potem vzemi štiri znake od tam.
|
|
Nazaj na vrh |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 612 Aktiv.: 4.45 Kraj: Vrhnika
|
Objavljeno: Ned Jun 07, 2015 7:38 pm Naslov sporočila: |
|
|
Jaz bi samo rad iz stringa uart razbral tretji znak v stringu (ki bo zmeraj številka od 0-9) in ga pretvoril v byte.
Ali drugače: Uart="123456" jaz pa bi rad iz tega stringa razbral številko 3 in jo pretvoril v byte
PS:Moral bi narediti takole
Koda: |
Stringtobyte = Mid(uart , 3 , 1)
Izh1set = Val(stringtobyte) |
Zmeraj mi nagaja kakšna malenkost
|
|
Nazaj na vrh |
|
|
protoncek Član
Pridružen-a: Sre 31 Jan 2007 9:41 Prispevkov: 9573 Aktiv.: 45.68 Kraj: Mengeš
|
Objavljeno: Ned Jun 07, 2015 7:46 pm Naslov sporočila: |
|
|
Natanko tako, ja.
Vedno moraš pazljivo prebrat help za nek ukaz, če ne razumeš pa vpisati demo program zanj (je praktično vedno zraven) in preizkusit. Če ukaza ne razumeš ali ga razumeš narobe, je pa hudič, ja...
|
|
Nazaj na vrh |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 612 Aktiv.: 4.45 Kraj: Vrhnika
|
Objavljeno: Pet Jun 19, 2015 8:44 pm Naslov sporočila: |
|
|
Že nekaj časa razmišljam kako, bi naredil, da če tiščim tipko recimo 2 sekundi naredi program1 če pa tiščim 4 sekunde pa naredi program2 brez da bi izvršil program1.
Nič pametnega mi ne pade na pamet
|
|
Nazaj na vrh |
|
|
BorisK Član
Pridružen-a: Sre 02 Apr 2008 23:43 Prispevkov: 239 Aktiv.: 1.22 Kraj: Ljubljana
|
|
Nazaj na vrh |
|
|
Profesor Einstein Član
Pridružen-a: Ned 24 Sep 2006 0:13 Prispevkov: 1423 Aktiv.: 6.65 Kraj: Rogaška Sl.
|
Objavljeno: Sre Avg 19, 2015 11:16 pm Naslov sporočila: |
|
|
Zdravo
Zanima me kako prepričati bascom, da bo sprejel zunanjo referenčno napetost na AD pretvorniku pri (attiny 26).
PA.3 (AREF) deklariram kot vhod ?
Potem pa bo potrebno verjetno nastaviti preko registra ADMUX ?
Hvala za pomoč.
Lp.
_________________ --
"Če bi volitve kaj pomagale, bi jih prepovedali." (Mark Twain) |
|
Nazaj na vrh |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 612 Aktiv.: 4.45 Kraj: Vrhnika
|
Objavljeno: Sre Avg 19, 2015 11:23 pm Naslov sporočila: |
|
|
Koda: |
Config Adc = Single , Prescaler = Auto , Reference = Avcc |
Jaz imam tako pri atmega8
|
|
Nazaj na vrh |
|
|
Profesor Einstein Član
Pridružen-a: Ned 24 Sep 2006 0:13 Prispevkov: 1423 Aktiv.: 6.65 Kraj: Rogaška Sl.
|
Objavljeno: Čet Avg 20, 2015 12:03 am Naslov sporočila: |
|
|
Hvala za odgovor.
Že deluje...
Lp.
_________________ --
"Če bi volitve kaj pomagale, bi jih prepovedali." (Mark Twain) |
|
Nazaj na vrh |
|
|
mato1111 Član
Pridružen-a: Pet 28 Dec 2012 14:42 Prispevkov: 612 Aktiv.: 4.45 Kraj: Vrhnika
|
Objavljeno: Čet Avg 20, 2015 8:17 pm Naslov sporočila: |
|
|
Imam vprašanje glede programa za tipkovnico 3x4. Za osnovo sem vzel program iz primera AN #144 - CodeLock AVR
Rad bi naredil, da ko vtipkam 4 številke in pritisnem # da si program zapomne kombinacijo oz jo shrani v spremenljivko "code". Sproti se na LCD izpisuje vrednost spremenljivke "code" ko tipkam številko napr: 1234 ko pa pritisnem # in bi moralo napisati "geslo sprejeto" in vrednost spremenljivke "code" napr: 1234 pa izpiše 0.
Koda: |
$regfile = "m16def.dat"
$crystal = 8000000
$baud = 9600
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , Rs = Portb.3 , E = Portb.2
Config Lcd = 16 * 2
Dim Keyread As Byte
Dim Key As Byte
Dim Code As Word
Dim Mycode As Word
Dim Code1 As Word
Dim Digits As Byte
Ddrd = 255
Portd = 0
Config Kbd = Portc , Debounce = 40
Cls
Cursor Off Noblink
Begin:
Code = 0
Digits = 0
Point = 0
Scan:
Cls
Lcd "VNESI KODO"
Do
Keyread = Getkbd()
If Keyread <> 16 Then Gosub Gotkey
Waitms 100
Loop
Gotkey:
Ddrb = 255
Waitms 200
Key = Lookup(keyread , Dta)
If Key <> 11 Then 'CE NI #
If Key <> 15 Then 'CE NI *
If Digits < 4 Then 'ce je manj kot 4 znaki
Incr Digits
Point = Digits + 6
Code = Code * 10
Code = Code + Key
Cls
Locate 2 , 1
Lcd Code
End If
End If
End If
If Key = 11 And Digits = 4 Then 'CE JE pritisnena # in 4 znaki potem POTRDI PIN
Code = Code1
Cls
Upperline
Lcd "KODA SPREJETA"
Lowerline
Lcd Code
Wait 3
Goto Begin
End If
If Key = 15 And Digits <= 4 Then 'CE JE pritisnjena * IZBRISI VNESENO
Lowerline
Lcd " "
Code = 0
Digits = 0
Point = 0
Goto Scan
End If
Return
Dta:
Data 1 , 4 , 7 , 15
Data 2 , 5 , 8 , 0
Data 3 , 6 , 9 , 11
Data 65 , 66 , 67 , 68 |
Nazadnje urejal/a mato1111 Čet Avg 20, 2015 9:18 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
|
Vlado Član
Pridružen-a: Sre 03 Mar 2004 21:35 Prispevkov: 561 Aktiv.: 2.52 Kraj: Ljubljana
|
Objavljeno: Čet Avg 20, 2015 9:12 pm Naslov sporočila: |
|
|
Mato,
kodo ne moreš potrditi in shraniti z isto tipko (#).
Za shranjevanje kode uporabi *, za potrditev kode pa uporabi #.
Prav tako shranjeno kodo shrani v eeprom, na začetku programa jo preberi,
drugače boš po vsakem izklopu izgubil shranjeno kodo - kode če jih bo več.
Ko sem delal tipkovnico, sem imel eno kodo ki je služila za dodajanje in brisanje kod.
Taki kodi ponavadi rečejo master, ali pa servisna koda.
Tako kot imaš ti narejeno bi vsak lahko prišel vpisal štiri mestno kodo jo potrdil in uporabil tvojo tipkovnico.
LP
|
|
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: 68 dni
Powered by phpBB © 2001, 2005 phpBB Group
|