|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
stursc Član
Pridružen-a: Tor 08 Jun 2004 14:29 Prispevkov: 323 Aktiv.: 1.45
|
Objavljeno: Tor Nov 10, 2009 1:26 pm Naslov sporočila: |
|
|
@RudiP
To je poznana rešitev
@Program_err
Tabele so prava rešitev. Problem je iskati pravo tabelo. Namreč, če napisem 200 tabel, nebi rad pisal 200X LOOKUP(i, tabela), ampak (če je sploh mogoče)
1 X LOOKUP(i , x). To mi še ni uspelo.
Ta rešitev bi me rešila pisanja in "prihranka" v čipu.
Če ima še kdo kako idejo, prosim
Hvala
LP, stursc |
|
Nazaj na vrh |
|
|
rudiP Član
Pridružen-a: Tor 07 Avg 2007 15:30 Prispevkov: 1234 Aktiv.: 6.06 Kraj: KOPER
|
Objavljeno: Sre Nov 11, 2009 9:14 am Naslov sporočila: |
|
|
Tu je rešitev malo drugače z indexi na bite. Primer deluje in je napisan samo za
prikaz in upam da bo tebi in še marsikomu prišel prav.
Koda: |
$regfile = "8515def.dat"
$baud = 19200
$crystal = 11059200
$hwstack = 64
$swstack = 64
$framesize = 64
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db7 = Portb.7 , Db6 = Portb.6 , Db5 = Portb.5 , Db4 = Portb.4 , E = Portb.2 , Rs = Portb.1
Cursor Off
Cls
Lcd "Test PORT in PIN"
'Wait 1
'------------------------------------------------------------------------------
'deklaracija subrutin
Declare Sub Prikazi
Declare Sub Xx(byval Ix As Byte)
Declare Sub Gor
Declare Sub Dol
'------------------------------------------------------------------------------
Config Porta = Output
Config Portc = Output
Config Portd = Input
Dim I As Byte
Dim Pa As Byte
Dim Pc As Byte
'*** deklaracija tipk
Tipka1 Alias Pind.0
Tipka2 Alias Pind.1
'*** deklaracija pinov
Rele1 Alias Porta.0
Rele2 Alias Porta.1
Rele3 Alias Porta.2
Rele4 Alias Porta.3
Rele5 Alias Porta.4
Rele6 Alias Porta.5
Rele7 Alias Porta.6
Rele8 Alias Porta.7
Rele9 Alias Portc.7
Rele10 Alias Portc.6
Rele11 Alias Portc.5
Rele12 Alias Portc.4
Rele13 Alias Portc.3
Rele14 Alias Portc.2
Rele15 Alias Portc.1
Rele16 Alias Portc.0
Porta = 0 'Izklopiš vse releje na portu A
Portc = 0 'Izklopiš vse releje na portu C
I = 0
Do
'Zaradi simulacije sem zakomentiral spodnje vrstice
' Debounce Tipka1 , 0 , Gor , Sub
Gor
' Debounce Tipka2 , 0 , Dol , Sub
' Dol
Call Xx(i)
Call Prikazi
Loop
'-------------------------------------------------------------------------------
Sub Gor:
Incr I
If I > 16 Then I = 1
End Sub
'-------------------------------------------------------------------------------
Sub Dol:
Decr I
If I < 1 Then I = 16
End Sub
'-------------------------------------------------------------------------------
Sub Xx(ix As Byte)
Decr Ix
If Ix > 8 Then
Ix = Ix - 8
Porta = 0
If Pc.ix = 0 Then Set Pc.ix Else Reset Pc.ix
Portc = Pc
Else
Portc = 0
If Pa.ix = 0 Then Set Pa.ix Else Reset Pa.ix
Porta = Pa
End If
End Sub
'-------------------------------------------------------------------------------
Sub Prikazi:
Cls
Lcd Bin(pa)
Locate 2 , 1
Lcd Bin(pc)
End Sub
'-------------------------------------------------------------------------------
end
|
_________________ Lep pozdrav iz Kopra Rudi |
|
Nazaj na vrh |
|
|
linel Član
Pridružen-a: Čet 06 Mar 2008 21:14 Prispevkov: 178 Aktiv.: 0.91 Kraj: prekmurje
|
Objavljeno: Čet Dec 03, 2009 8:42 pm Naslov sporočila: Programiranje v bascom avr |
|
|
pozdravljeni!
mene pa zanima kako pri se pri adc skalira, vhodna napetost 0 - 5V, referenčna napetost 5V resolucija AD 10 bitna....zdaj pa želimo merilno območje ( prikaz na lcd) od 0 - 180*C ... zanima me kako je treba definirati izračun v programu da dobimo takšen prikaz.. lahko prosim gdo napiše enačbe? |
|
Nazaj na vrh |
|
|
eddie Član
Pridružen-a: Sre 10 Dec 2003 21:02 Prispevkov: 706 Aktiv.: 3.17 Kraj: Severna primorska
|
Objavljeno: Čet Dec 03, 2009 10:17 pm Naslov sporočila: |
|
|
y=k*x+n
Lp |
|
Nazaj na vrh |
|
|
protoncek Član
Pridružen-a: Sre 31 Jan 2007 9:41 Prispevkov: 9573 Aktiv.: 45.63 Kraj: Mengeš
|
Objavljeno: Čet Dec 03, 2009 10:55 pm Naslov sporočila: |
|
|
če to ne znaš, potem močno dvomim da ti bo uspelo napisati program...10 bitov je 2 na 10, kar znese 1024 različnih vrednosti. Torej bo 0 stopinj 0 in 180 stopinj 1024. Če bo na ADC torej 512, to pomeni temperaturo 90 stopinj...čista osnovnošolska matematika...
AJA...da ne rečem da boš moral temperaturni senzor imeti tak, da bo pri nič stopinj dajal 0 voltov in pri 180 stopinj 5 voltov... |
|
Nazaj na vrh |
|
|
program_er Član
Pridružen-a: Sob 08 Mar 2008 13:47 Prispevkov: 2173 Aktiv.: 11.06 Kraj: Maribor (Pohorje)
|
Objavljeno: Čet Dec 03, 2009 11:00 pm Naslov sporočila: |
|
|
protoncek je napisal/a: |
če to ne znaš, potem močno dvomim da ti bo uspelo napisati program...10 bitov je 2 na 10, kar znese 1024 različnih vrednosti. Torej bo 0 stopinj 0 in 180 stopinj 1024. Če bo na ADC torej 512, to pomeni temperaturo 90 stopinj...čista osnovnošolska matematika... |
Z linel-om sva to že predelala. Problem je v sami kodi.
ADC = 0 - 1023
0 = 0
1023 = 180
1023 / 180 = 5,6833
1023 / 5,6833 = 180,0010557
Torej 1 stopinja ima razpon 5,6833 ADC vrednosti.
Torej bi moral biti osnutek kode v stilu tega:
...
Adc_vrednost = Getadc(0)
Vrednost = Adc_vrednost / 5,6833
...
to bi bilo potrebno še zaokrožiti na cele številke in potem prikazati na LCDju. Ampak vedno javi neko napako! Zato on prosi za del delujoče kode.
Torej teorijo sva že predelala, problem je koda v praksi.
Hvala v imenu obeh. |
|
Nazaj na vrh |
|
|
protoncek Član
Pridružen-a: Sre 31 Jan 2007 9:41 Prispevkov: 9573 Aktiv.: 45.63 Kraj: Mengeš
|
Objavljeno: Čet Dec 03, 2009 11:09 pm Naslov sporočila: |
|
|
Hja, takole je to težko. Napako...katero? Lahko je spremenljivka narobe definirana, lahko je ....marsikaj... |
|
Nazaj na vrh |
|
|
program_er Član
Pridružen-a: Sob 08 Mar 2008 13:47 Prispevkov: 2173 Aktiv.: 11.06 Kraj: Maribor (Pohorje)
|
Objavljeno: Čet Dec 03, 2009 11:21 pm Naslov sporočila: |
|
|
Jernej, prilepi kodo |
|
Nazaj na vrh |
|
|
linel Član
Pridružen-a: Čet 06 Mar 2008 21:14 Prispevkov: 178 Aktiv.: 0.91 Kraj: prekmurje
|
Objavljeno: Čet Dec 03, 2009 11:45 pm Naslov sporočila: Programiranje v bascom avr |
|
|
v bistvu narašča od vrednosti 0 - 64% pote pa skoči na 0 in spet narašča do 36%, moralo bi pa normalno od 0 - 100%
Dim Adc_vrednost As Word , Adc_vrednost2 As Single , Vrednost As Single , Izpis As String * 5
Start Adc
Do
Adc_vrednost = Getadc(0)
Adc_vrednost2 = Adc_vrednost
Adc_vrednost = Adc_vrednost * 100
Vrednost = Adc_vrednost / 1023
Izpis = Fusing(vrednost , "#.#")
Locate 1 , 1
Lcd "ADC: " ; izpis ; "%" ; " "
Waitms 10
Loop |
|
Nazaj na vrh |
|
|
protoncek Član
Pridružen-a: Sre 31 Jan 2007 9:41 Prispevkov: 9573 Aktiv.: 45.63 Kraj: Mengeš
|
Objavljeno: Čet Dec 03, 2009 11:56 pm Naslov sporočila: |
|
|
Takole na hitro bi rekel da je od stavka:
Adc_vrednost2=Adc_vrednost
napaka, ker od tam naprej računaš z adc in ne z adc2. Adc je definirana kot word, kar pomeni anjvečjo vrednost 65535. Ko to preseže, gre spet na nulo, zato tako obnašanje. ČE word spremenljivki recimo rečeš da naj bo 65000 plus 10000, potem to ni 75000 ampak 75000-65535=9465, ker preskoči in začne spet od nule. Računaj z ADC2, ki je single in mora delati, saj zato si jo definiral. Najprej si ji dodelil enako vrednost, potem je pa nikjer ne uporabljaš... |
|
Nazaj na vrh |
|
|
program_er Član
Pridružen-a: Sob 08 Mar 2008 13:47 Prispevkov: 2173 Aktiv.: 11.06 Kraj: Maribor (Pohorje)
|
Objavljeno: Pet Dec 04, 2009 6:43 am Naslov sporočila: |
|
|
@protoncek, hvala za opombo, najbrž bo zdaj delalo. Ko sva debatirala preko Skypa sva ravno zato uvedla Single spremenljivko Adc_vrednost2, nato pa sva izgleda pozabila spremeniti nadaljni program |
|
Nazaj na vrh |
|
|
linel Član
Pridružen-a: Čet 06 Mar 2008 21:14 Prispevkov: 178 Aktiv.: 0.91 Kraj: prekmurje
|
Objavljeno: Pet Dec 04, 2009 7:32 am Naslov sporočila: Programiranje v bascom avr |
|
|
koda je zdaj taka, in stvar dela, hvala za opombo:)
Dim Adc_vrednost As Word , Adc_vrednost2 As Single , Vrednost As Single , Izpis As String * 5
Start Adc
Do
Adc_vrednost = Getadc(0)
Adc_vrednost2 = Adc_vrednost
Adc_vrednost2 = Adc_vrednost * 100
Vrednost = Adc_vrednost2 / 1023
Izpis = Fusing(vrednost , "#.#")
Locate 1 , 1
Lcd "ADC: " ; Izpis ; "%" ; " "
Waitms 10
Loop |
|
Nazaj na vrh |
|
|
Samo87 Član
Pridružen-a: Pet 25 Jan 2008 2:14 Prispevkov: 462 Aktiv.: 2.34 Kraj: Kamnik
|
Objavljeno: Pet Dec 04, 2009 10:36 am Naslov sporočila: |
|
|
Koda: |
Adc_vrednost2 = Adc_vrednost
Adc_vrednost2 = Adc_vrednost * 100 |
Kaj pa je tukaj "fora" prvega stavka pred drugim? |
|
Nazaj na vrh |
|
|
protoncek Član
Pridružen-a: Sre 31 Jan 2007 9:41 Prispevkov: 9573 Aktiv.: 45.63 Kraj: Mengeš
|
Objavljeno: Pet Dec 04, 2009 12:04 pm Naslov sporočila: Re: Programiranje v bascom avr |
|
|
linel je napisal/a: |
koda je zdaj taka, in stvar dela, hvala za opombo:)
|
Ni kaj...samo kot je že Samo rekel, tisti stavek je brez potrebe tam...tudi z njim dela, samo brez veze je... |
|
Nazaj na vrh |
|
|
linel Član
Pridružen-a: Čet 06 Mar 2008 21:14 Prispevkov: 178 Aktiv.: 0.91 Kraj: prekmurje
|
Objavljeno: Pet Dec 25, 2009 7:47 pm Naslov sporočila: Programiranje v bascom avr |
|
|
zanima me,kako se naredi, da se dogodek izvrši če npr gledamo dva pogoja
if pina.0 and pina.1 = 1 then
portc = 1
vendar v bascomu nisem zasledil ukaza and, kako vi naredite v tem primeru? |
|
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: 75 dni
Powered by phpBB © 2001, 2005 phpBB Group
|