Miért nem jó?
Miért nem jó?
Sziasztok!
Egyszerű, 4 gomb kezelése, mégsem megy.Ha fehúzom mindegyiket 1-nek látja, ha nem , mindegyiket 0-nak ha nyomom, ha nem. A ny.gombok földre húzzák a bemeneteket.
$regfile = "M32def.dat"
'---------------------------
Gomb0 Alias Portd.2
Gomb1 Alias Portd.3
Gomb2 Alias Portd.4
Gomb3 Alias Portd.5
'---------------------------
Config Portd.2 = Input
Config Portd.3 = Input
Config Portd.4 = Input
Config Portd.5 = Input
'---------------------------
'felúz
Gomb0 = 1
Gomb1 = 1
Gomb2 = 1
Gomb3 = 1
'---------------------------
Do
Cls
Disable Interrupts
If Gomb0 = 1 Then
Cls
Lcd "gomb0=1"
Wait 1
End If
If Gomb1 = 1 Then
Cls
Lcd "gomb1=1"
Wait 1
End If
If Gomb2 = 1 Then
Cls
Lcd "gomb2=1"
Wait 1
End If
If Gomb3 = 1 Then
Cls
Lcd "gomb3=1"
Wait 1
End If
If Gomb3 = 0 Then
Cls
Lcd "gomb3=0"
Wait 1
End If
Loop
End
Mi a hiba?
Köszönöm, sziasztok.
Egyszerű, 4 gomb kezelése, mégsem megy.Ha fehúzom mindegyiket 1-nek látja, ha nem , mindegyiket 0-nak ha nyomom, ha nem. A ny.gombok földre húzzák a bemeneteket.
$regfile = "M32def.dat"
'---------------------------
Gomb0 Alias Portd.2
Gomb1 Alias Portd.3
Gomb2 Alias Portd.4
Gomb3 Alias Portd.5
'---------------------------
Config Portd.2 = Input
Config Portd.3 = Input
Config Portd.4 = Input
Config Portd.5 = Input
'---------------------------
'felúz
Gomb0 = 1
Gomb1 = 1
Gomb2 = 1
Gomb3 = 1
'---------------------------
Do
Cls
Disable Interrupts
If Gomb0 = 1 Then
Cls
Lcd "gomb0=1"
Wait 1
End If
If Gomb1 = 1 Then
Cls
Lcd "gomb1=1"
Wait 1
End If
If Gomb2 = 1 Then
Cls
Lcd "gomb2=1"
Wait 1
End If
If Gomb3 = 1 Then
Cls
Lcd "gomb3=1"
Wait 1
End If
If Gomb3 = 0 Then
Cls
Lcd "gomb3=0"
Wait 1
End If
Loop
End
Mi a hiba?
Köszönöm, sziasztok.
Inkább így kellene:

Kód: Egész kijelölése
Cls
If Gomb0 = 1 Then
Lcd "gomb0=1"
Else
Lcd "gomb0=0"
End If
Wait 1
....
Hello!
Mit szeretnél kiiratni a kijelzőre? Mivel 4 bemenetet figyelsz javaslom jelenitsd meg külön külön mindet. (az 5. feltétel nem értem igazán ill. a előző 4 is egymást felülirja). Ötletként:
Mit szeretnél kiiratni a kijelzőre? Mivel 4 bemenetet figyelsz javaslom jelenitsd meg külön külön mindet. (az 5. feltétel nem értem igazán ill. a előző 4 is egymást felülirja). Ötletként:
Kód: Egész kijelölése
Do
Cls
'---Gomb0 állapotának kijezése 1,1 pozicióba---
'---1,1 poziciót a Cls parancs garantálja---
If Gomb0 = 0 Then
Lcd "gomb0=0"
Else
Lcd "gomb0=1"
End If
'---Gomb1 állapotának kijezése 1,10 pozicióba---
Locate 1 , 10
If Gomb1 = 0 Then
Lcd "gomb1=0"
Else
Lcd "gomb1=1"
End If
'---Gomb2 állapotának kijezése 2,1 pozicióba---
Locate 2 , 1
If Gomb2 = 0 Then
Lcd "gomb2=0"
Else
Lcd "gomb2=1"
End If
'---Gomb3 állapotának kijezése 2,10 pozicióba---
Locate 2 , 10
If Gomb3 = 0 Then
Lcd "gomb3=0"
Else
Lcd "gomb3=1"
End If
Loop
EndGomb, mint bemenet:
PIN
Kimenet:
PORT
PIN
Kimenet:
PORT
Kód: Egész kijelölése
'---------------------------
Gomb0 Alias Portd.2
Gomb1 Alias Portd.3
Gomb2 Alias Portd.4
Gomb3 Alias Portd.5
'---------------------------
Config Pind.2 = Input
Config Pind.3 = Input
Config Pind.4 = Input
Config Pind.5 = Input
'---------------------------
Mag valami ilyesmi is kellene bele:
Csak a saját LCD bekötéshez igazítva! 
Kód: Egész kijelölése
'Konfigurálás
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.4 , Rs = Portc.5Köszönöm
Persze, nem portx.y, hanem pinx.y . Ennyi volt a hiba. Köszönöm szépen Robi, meg a többieknek is. Ez egy több K-s progi, Az LCD config, meg minden más absolut korrekt, csak észrevettem, hogy nem kezeli a gombokat. Ezért írtam egy idétlen torzót, hogy lássam mi történik. Igen Franz, egymásra írta, igen Kapu48, else, és rögtön olvasható.
Tanulságok:
Érdekes, hogy a "config portx.y=input " ellen nem tiltakozott a fordító.
Továbbá a hw. lebegő bemenete bizonytalan kiolvasást produkált annak ellenére, hogy a belső R (4,7k) be van kapcsolva. De ha ezt kikapcsolom, és kívülről akasztom rá az 5kohmot, akkor teljesen korrekten működik. Megmagyarázhatatlan. 20%-ban nullát olvas ki. (Pedig ez PIC esetén hibátlanul működne.) Erre figyelni kell. Mind a 4 láb így működik, nem hiszem, hogy kontroller hiba.
Nélkületek biztos elmaszatolgattam volna vele még néhány napot. Köszönöm!
Sziasztok.
Tanulságok:
Érdekes, hogy a "config portx.y=input " ellen nem tiltakozott a fordító.
Továbbá a hw. lebegő bemenete bizonytalan kiolvasást produkált annak ellenére, hogy a belső R (4,7k) be van kapcsolva. De ha ezt kikapcsolom, és kívülről akasztom rá az 5kohmot, akkor teljesen korrekten működik. Megmagyarázhatatlan. 20%-ban nullát olvas ki. (Pedig ez PIC esetén hibátlanul működne.) Erre figyelni kell. Mind a 4 láb így működik, nem hiszem, hogy kontroller hiba.
Nélkületek biztos elmaszatolgattam volna vele még néhány napot. Köszönöm!
Sziasztok!
Menü szerkesztésében kérnék segítséget. 5 kimenetet lehet időre be illetve kikapcsolni. Mikor a beállítás menübe bemegyek, az alsó sorban az időpont jelenik meg:
00:00:00 formátumban, a locate 2 , 5 helyen.
A felső sor üres, ide szeretnék szöveget, mindig az adott kimenethez tartozót, pl. " Light on" "Light off", vagy másik kimenethez, " Heat on" " Heat off" a locate 1 , 1 helyre.
Valamilyen változót kell beletenni pl. Lcd ; Felirat ; ?
Hogy lehet azt megcsinálni, hogy mikor az időpontokat állítom be az adott kimenethez, akkor mindig az adott szöveget jelenítse meg?
Előre is köszönöm!
Menü szerkesztésében kérnék segítséget. 5 kimenetet lehet időre be illetve kikapcsolni. Mikor a beállítás menübe bemegyek, az alsó sorban az időpont jelenik meg:
00:00:00 formátumban, a locate 2 , 5 helyen.
A felső sor üres, ide szeretnék szöveget, mindig az adott kimenethez tartozót, pl. " Light on" "Light off", vagy másik kimenethez, " Heat on" " Heat off" a locate 1 , 1 helyre.
Valamilyen változót kell beletenni pl. Lcd ; Felirat ; ?
Hogy lehet azt megcsinálni, hogy mikor az időpontokat állítom be az adott kimenethez, akkor mindig az adott szöveget jelenítse meg?
Előre is köszönöm!
A hardver úgy néz ki, hogy az lcd alatt gombsor van, és a kimeneteken relék vannak. A relék időzítését lehet beállítani, hogy mikor kapcsoljanak ki, vagy be. Mikor az enter gombot lenyomom akkor megjelenik az lcd-n az időpont, az lcd alsó sorában, ebben a formátumban: 00:00:00. A bekapcsoláshoz be kell állítani az óra perc másodperc formátumot, majd mikor le "enterelem" utána új képernyőn ugyan ez jelenik meg, csak a kikapcsolás idejét kell meghatározni.Robert írta:Na ez nem világos....
Szóval mit is kell tulajdonképpen?
Az lcd felső sora üres és ide szeretnék szöveget íratni az lcd-re. Mire a sokadik időpontot kell bekonfigurálni, így a végére azt sem tudom, most a bekapcsolást, vagy a kikapcsolást állítom. Ezért is megkönnyítené, ha írná az lcd-n, hogy mit is állítok.
Ez lenne a cél:
Heat on vagy Heat off
22:00:00 07:00:00
A Heat on, Heat off és a többi szöveg helyére kellene gondolom valamilyen változót tenni.
Köszönöm a hasznos infókat!
Sok mintaprogramot és a Bascom könyvet is átnéztem, hogy mihez tudnám hasonlítani a feladatot. Találtam egyet a mintaprogramok között az adc.bas. Valami ilyesmi kellene, hogy az elején definiálja: Dim Adcchannel As Byte, Dim Adcvalue As Word, Dim Adcvoltage As Single
a változókat, (nem tudom ez-e a helyes kifejezés) és mikor odaér a print utasításhoz akkor mindig az adott szöveget, vagy számot teszi be:
Print "Ch" ; Adcchannel ; ": Code=" ; Adcvalue ; " Voltage=" ; Adcvoltage ; "V"
Kivágtam az adc.bas mintaprogramból egy részletet:
Elkezdtem próbálkozni és ezzel egészítettem ki:
Dim Be_vagy_ki As Byte
majd a menüben:
Be_vagy_ki = 30
Be_vagy_ki = 40
és amikor az órához ér, akkor azt teszi be. ami éppen aktuális a
Locate 1 , 1
Lcd ; Be_vagy_ki sorban:
Temp = Klawiatura()
Locate 1 , 1 : Lcd Napis
Locate 2 , 5
Call Wyswietl_czas(godzina , Minuta , Sekunda)
Locate 1 , 1
Lcd ; Be_vagy_ki
Select Case Licznik
Case 1 : Godzina = Czas(2 , 5 , 23)
Case 2 : Minuta = Czas(2 , 8 , 59)
Case 3 : Sekunda = Czas(2 , 11 , 59)
End Select
If Temp = 3 Then
Incr Licznik
If Licznik = 4 Then Exit Do
End If
Reset Watchdog
Loop
End Sub
Most már alakul, mert nagyjából minden jó helyen íródik ki az lcd-n, de csak 2 jegyű számokat enged bevinni a Be_vagy_ki = ... sorban. Azt kellene bevinni, hogy:
Be_vagy_ki = Heat on
Be_vagy_ki = Heat off
Be_vagy_ki = Light on
Be_vagy_ki = Light off
Kipróbálam még azt is hogy:
Dim Be_vagy_ki As Bit
Dim Be_vagy_ki As Word és a többit is, de nem lett jó.
Hogy lehet azt megcsinálni, hogy ne számokat, hanem betűk jelenjenek meg az lcd-n?
Sok mintaprogramot és a Bascom könyvet is átnéztem, hogy mihez tudnám hasonlítani a feladatot. Találtam egyet a mintaprogramok között az adc.bas. Valami ilyesmi kellene, hogy az elején definiálja: Dim Adcchannel As Byte, Dim Adcvalue As Word, Dim Adcvoltage As Single
a változókat, (nem tudom ez-e a helyes kifejezés) és mikor odaér a print utasításhoz akkor mindig az adott szöveget, vagy számot teszi be:
Print "Ch" ; Adcchannel ; ": Code=" ; Adcvalue ; " Voltage=" ; Adcvoltage ; "V"
Kivágtam az adc.bas mintaprogramból egy részletet:
Kód: Egész kijelölése
$crystal = 14745600
$baud = 19200
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Dim Adcconvstatus As Byte
Dim Adcchannel As Byte
Dim Adcvalue As Word
Dim Adctemp As Word
Dim Adcvoltage As Single
'
Declare Sub Get_mmavr_adc(adcchannel As Byte , Adcvalue As Word)
'
'CONFIGURE ADC
Didr0 = &H04 'AD0..AD3 - analog inputs
Didr1 = &H80 'AD15 - analog input
Admux = &H40 'Configure analog multiplexer,AVCC with ext.capacitor at AREF pin
Adcsrb = &H00
Adcsra = &HD7 'Start conversion
Do
Print
Print "-- Mini-Max/AVR analog inputs --"
For Adcchannel = 0 To 4
Call Get_mmavr_adc(adcchannel , Adcvalue)
Adcvoltage = 5 * Adcvalue
Adcvoltage = Adcvoltage / 1023
Print "Ch" ; Adcchannel ; ": Code=" ; Adcvalue ; " Voltage=" ; Adcvoltage ; "V"
Next
Waitms 1000
Loop
EndElkezdtem próbálkozni és ezzel egészítettem ki:
Dim Be_vagy_ki As Byte
majd a menüben:
Be_vagy_ki = 30
Be_vagy_ki = 40
és amikor az órához ér, akkor azt teszi be. ami éppen aktuális a
Locate 1 , 1
Lcd ; Be_vagy_ki sorban:
Temp = Klawiatura()
Locate 1 , 1 : Lcd Napis
Locate 2 , 5
Call Wyswietl_czas(godzina , Minuta , Sekunda)
Locate 1 , 1
Lcd ; Be_vagy_ki
Select Case Licznik
Case 1 : Godzina = Czas(2 , 5 , 23)
Case 2 : Minuta = Czas(2 , 8 , 59)
Case 3 : Sekunda = Czas(2 , 11 , 59)
End Select
If Temp = 3 Then
Incr Licznik
If Licznik = 4 Then Exit Do
End If
Reset Watchdog
Loop
End Sub
Most már alakul, mert nagyjából minden jó helyen íródik ki az lcd-n, de csak 2 jegyű számokat enged bevinni a Be_vagy_ki = ... sorban. Azt kellene bevinni, hogy:
Be_vagy_ki = Heat on
Be_vagy_ki = Heat off
Be_vagy_ki = Light on
Be_vagy_ki = Light off
Kipróbálam még azt is hogy:
Dim Be_vagy_ki As Bit
Dim Be_vagy_ki As Word és a többit is, de nem lett jó.
Hogy lehet azt megcsinálni, hogy ne számokat, hanem betűk jelenjenek meg az lcd-n?
Kipróbálam és ezt a hibát hozta:kapu48 írta:Ha lejjebb görgetet az ablakot, van 1 ilyen sor: String * 1
Dim Be_vagy_ki As String * 1
Ez alapból 1 karakteres szövegváltozó.
Javítod, pl. igy:
Dim Be_vagy_ki As String * 10
Ez Max 10 karakteres szövegváltozónak foglal helyet .
Error: 242 : Line : 314: Source variable does not match the target variable [0]
Úgy is megpróbáltam, hogy csak String * 1 marad és csak 1 betűt írtam a:
Be_vagy_ki = A sorba, de hibakód ugyan ez volt.
