Miért nem jó?

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
Gogo
Újonc
Újonc
Hozzászólások: 11
Csatlakozott: 2008. augusztus 5. kedd, 6:00

Miért nem jó?

Hozzászólás Szerző: Gogo »

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.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

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 
....
:arrow:
Avatar
Franz
DrótVégénSzéndarab
Hozzászólások: 43
Csatlakozott: 2009. május 29. péntek, 6:00

Hozzászólás Szerző: Franz »

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:

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
End
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Gomb, mint bemenet:
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 
'---------------------------
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Mag valami ilyesmi is kellene bele:

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.5
Csak a saját LCD bekötéshez igazítva! :D
Avatar
Gogo
Újonc
Újonc
Hozzászólások: 11
Csatlakozott: 2008. augusztus 5. kedd, 6:00

Köszönöm

Hozzászólás Szerző: Gogo »

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.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

A belső felhúzó értéke 20...82k közt mozog!
Avatar
paroh
Biztosítékgyilkos
Hozzászólások: 51
Csatlakozott: 2009. május 21. csütörtök, 6:00

Hozzászólás Szerző: paroh »

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!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Na ez nem világos....
Szóval mit is kell tulajdonképpen?
Avatar
paroh
Biztosítékgyilkos
Hozzászólások: 51
Csatlakozott: 2009. május 21. csütörtök, 6:00

Hozzászólás Szerző: paroh »

Robert írta:Na ez nem világos....
Szóval mit is kell tulajdonképpen?
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.

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.
Avatar
herc1234
Bitfaragó
Hozzászólások: 459
Csatlakozott: 2007. február 9. péntek, 7:00

Hozzászólás Szerző: herc1234 »

Ha nincs meg az eredeti "forráskód"-od akkor sehogy.
Viszont mivel az i/o ismert irhatsz magadnak saját
programot. :D
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

IO kezelés:

Config portc.2 = output
portc.2=1 vagy portc.2=0

LCD kezelés:
Config LCD=....
Locale parancs, CLS parancs és társai járhatóak.

Gombok: Ha sima lábként kezeled (nem mátrix alapú), akkor:
Config portc.2 = input
if picc.2= 1 then goto megnyomva....
Avatar
paroh
Biztosítékgyilkos
Hozzászólások: 51
Csatlakozott: 2009. május 21. csütörtök, 6:00

Hozzászólás Szerző: paroh »

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:

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
End

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?
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

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 .
8)
Avatar
paroh
Biztosítékgyilkos
Hozzászólások: 51
Csatlakozott: 2009. május 21. csütörtök, 6:00

Hozzászólás Szerző: paroh »

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 .
8)
Kipróbálam és ezt a hibát hozta:

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.
Válasz küldése