Soros port (rs232)

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
kistigris
Biztosítékgyilkos
Hozzászólások: 62
Csatlakozott: 2012. január 19. csütörtök, 7:00

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

Az a fránya idézőjel :) Most már működik.Köszönöm.Valamint nekem nem engedi az or paranccsal . :-( Csak vagy az egyiket vagy a másikat.Ha ugy beírom ahogy irtad nem megy.csak ha önálóan írom be
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

If A = "I" or A = "i" Then ....

Mottó: a szoftver utasításaid és nem kívánságaid szerint működik
Avatar
kistigris
Biztosítékgyilkos
Hozzászólások: 62
Csatlakozott: 2012. január 19. csütörtök, 7:00

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

Köszönöm így már jó :-) Nehéz főnöknek lenni :-D
Avatar
rosszpelda
DrótVégénSzéndarab
Hozzászólások: 30
Csatlakozott: 2009. február 8. vasárnap, 7:00

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

Sziasztok !

A soros porttal szívok már két hete, de egyre rejtélyesebb hibák úsznak a felszínre.Beollózom először a vevő oldalának a kódját, hátha Ti megmondjátok mi a hiba. A mega8 külső 8MHz-ről jár, baud 9600 (az adó oldalon is). A vevő veszi a küldött karaktereket szépen, ennek megfelelően rá is fut az adott címkére és visszaküldi az adónak a vett karaktert, ám a ledet meg a kimenetet nem kapcsolja. A kód elején a ledet kapcsolgatja szépen, a kimenetek jól működnek, erre összehegesztettem egy tesztprogit, az rendben fut. De ennek valami kínja van:

Kód: Egész kijelölése

Config Portd.3 = Output
Config Portb.1 = Output
Config Portd.7 = Output
Config Portb.2 = Output
Config Portb.7 = Output
Config Portb.5 = Output
Config Portb.3 = Output
Config Portb.0 = Output
Config Portb.4 = Output
Config Portd.6 = Output
Config Portd.5 = Output

Config Serialin = Buffered , Size = 10


Egy Alias Portb.1
Ketto Alias Portd.7
Harom Alias Portb.2
Negy Alias Portb.7
Ot Alias Portb.5
Hat Alias Portd.6
Het Alias Portb.3
Nyolc Alias Portb.0
Kilenc Alias Portb.4
Tiz Alias Portd.5

Led Alias Portd.3


Dim A As Byte
Dim Bejovo As String * 1
Dim I As Byte
Dim Meres As Word
Dim Akkufesz As Single
Dim Meresieredmeny As String * 6




Config Adc = Single , Prescaler = Auto , Reference = Off

Stop Adc


Echo Off

Enable Interrupts


For I = 1 To 5

Set Led
Waitms 100
Reset Led
Waitms 500

Next




Eleje:


Do

Clear Serialin

Do

Loop Until Ischarwaiting() = 1



A = Inkey()
Bejovo = Chr(a)



If Bejovo = "A"then
Goto Csat1
Elseif Bejovo = "B"then
Goto Csat2
Elseif Bejovo = "C" Then
Goto Csat3
Elseif Bejovo = "D" Then
Goto Csat4
Elseif Bejovo = "E" Then
Goto Csat5
Elseif Bejovo = "F" Then
Goto Csat6
Elseif Bejovo = "G" Then
Goto Csat7
Elseif Bejovo = "H" Then
Goto Csat8
Elseif Bejovo = "I" Then
Goto Csat9
Elseif Bejovo = "J" Then
Goto Csat10
Elseif Bejovo = "K" Then
Goto Akku

End If




Loop



Csat1:


Set Egy
Set Led
Waitms 100
Reset Egy
Reset Led
Print Bejovo;


Goto Eleje

Csat2:


Set Ketto
Set Led
Waitms 100
Reset Ketto
Reset Led
Print Bejovo;


Goto Eleje

Csat3:

Set Harom
Set Led
Waitms 100
Reset Harom
Reset Led
Print Bejovo;


Goto Eleje

Csat4:

Set Negy
Set Led
Waitms 100
Reset Negy
Reset Led
Print Bejovo;


Goto Eleje

Csat5:

Set Ot
Set Led
Waitms 100
Reset Ot
Reset Led
Print Bejovo;


Goto Eleje

Csat6:

Set Hat
Set Led
Waitms 100
Reset Hat
Reset Led
Print Bejovo;


Goto Eleje

Csat7:

Set Het
Set Led
Waitms 100
Reset Het
Reset Led
Print Bejovo;


Goto Eleje

Csat8:

Set Nyolc
Set Led
Waitms 100
Reset Nyolc
Reset Led
Print Bejovo;


Goto Eleje

Csat9:

Set Kilenc
Set Led
Waitms 100
Reset Kilenc
Reset Led
Print Bejovo;


Goto Eleje

Csat10:

Set Tiz
Set Led
Waitms 100
Reset Tiz
Reset Led
Print Bejovo;


Goto Eleje



Akku:


Start Adc

Waitms 200
Meres = Getadc(0)

Akkufesz = Meres * 0.0147

Meresieredmeny = Str(akkufesz)

Print Meresieredmeny;

Stop Adc


Goto Eleje




End
Hajam tépem .....

Előre is köszi.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Hajragasztó:

GOTO-kat felejtsd el: gosub-ot + return-t használj...

$frames?
$hwstack?
$swstack?


$baud=9600 hiányzik az elejéről
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

ElseIf-eket felejtsd el Használj:

Kód: Egész kijelölése

Select Case Bejovo

  Case "A" : Gosub Csat1

  Case "B" : Gosub Csat2

 .......

END SELECT
Menyivel 1*űbb, és gyorsabb! :wink:
Avatar
kovacsna
Pákabűvész
Hozzászólások: 208
Csatlakozott: 2008. június 3. kedd, 6:00

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

Most én is mondjam, hogy felejtsd el?:)

Na jó...azért sem.

Betűk helyett, küld számokat! Elegánsabb!!!!
Később pedig ezért jó:

Kód: Egész kijelölése

dim csatik(10) as string * 8

csatik(0) = "nulla"
.
.
csatik(10) = "tiz"


declare sub csatlakozok (adat as byte)

.
.
.
.
do 

If inkey() =>0 and inkey() <= 10  then

bejovo = inkey()

call csatlakozok (bejovo)

else

Print "Hibás adat érkezett"

end if
.
.
.
.
loop

sub csatlakozok (adat as byte)

Set csatik(adat)
Set Led 
Waitms 100 
Reset csatik(adat) 
Reset Led 
Print Bejovo;


end sub

Még egyszerűbb, és bármikor bővíthető![/code]
Avatar
rosszpelda
DrótVégénSzéndarab
Hozzászólások: 30
Csatlakozott: 2009. február 8. vasárnap, 7:00

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

Köszi a gyors reakciót, este átfaragom, bár ami nem teljesen tiszta :

Robi : Ha a Bascomban a compiler menüpontban beállítom az m8def.dat-ot (mint eddig is tettem mindig), akkor kitölti a stackméreteket meg a frameméretet magától, ugyanitt állítom a baudrate-t is. Ezek ellenére be kell kézzel írnom az említett direktívákat a kód elejére ? A goto valahogy elsőre átláthatóbbnak tűnt, de a gosub valóban elegánsabb és rendezettebb is ... múlhat ezen egyébként ? Valami veremgondom lehet ?

Kapu48: a case-select már megvolt, de este újra átírom, mert tényleg szebb :)

Remélem este nem panaszkodni jövök, hanem csak egy nagy köszönetet mondani...
Avatar
rosszpelda
DrótVégénSzéndarab
Hozzászólások: 30
Csatlakozott: 2009. február 8. vasárnap, 7:00

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

A kód a sok ugrálás meg karakterküldözgetés miatt valóban elég kőkori monster benyomást kelt, egyelőre jobban olvashatóbbnak meg követhetőbbnek tűnt nekem, amint megcsinálja amit kell tökéletesen, tervezem, hogy puha bundába gyömöszölöm a belsejét. Jobban szeretem én is, ha a kód inkább cuki kutyusra hasonlít nem pedig félbevágott lóra :)

Aztán lehet, hogy ami az elején szörny, azt csomagolhatom bármibe, az is marad... szóval újratervezés... :)
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Hi kovacsna!

Sajnos ez így nem OK!
Eredetilen Kimeneteket akarunk billegtetni.
dim csatik(10) as string * 8 Hogyan jön ide string tömb?
Set csatik(adat) Stringn tömbnek az index változójára nem lehet Set/Reset utasítás küldeni!

8O
És a bilentyű vizsgálat is inkább Igy:

Kód: Egész kijelölése

 bejovo = inkey()
 If Bejovo => 0 And Bejovo <= 10 Then
A hozzászólást 2 alkalommal szerkesztették, utoljára kapu48 2012. március 24. szombat, 15:49-kor.
Avatar
kovacsna
Pákabűvész
Hozzászólások: 208
Csatlakozott: 2008. június 3. kedd, 6:00

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

Azért kellett a string tömb, hogy az aliasok meglegyenek,és azt feltételezzük, hogy a sorosporton számok érkeznek.
A SET -el kapcsolatban igazad van. Elnézést a félrevezetésért. C-ben nem gond:)

Be kell tenni egy select-case-t és kész.

Az inkey egy sorban miért nem jó? Sokkal tömörebb. Bár ezek már ízlések és pofonok!

A lényeg, hogy subrutinban meg lehet csinálni. Szerintem felesleges 10 külön subrutint hívogatni ezért!

Majd ha lesz időm megírom a kész progit.

A helyreigazítást pedig köszönöm!
A hozzászólást 1 alkalommal szerkesztették, utoljára kovacsna 2012. március 24. szombat, 15:55-kor.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

De Bascomban írjad!
Mert ha kevered Cpp-vel úgy nem fog mükszeni!

És a bilentyű vizsgálat is inkább Igy:
bejovo = inkey()
If Bejovo => 0 And Bejovo <= 10 Then
:lol:
Avatar
kovacsna
Pákabűvész
Hozzászólások: 208
Csatlakozott: 2008. június 3. kedd, 6:00

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

Mondtam, hogy bocsi.

Felesleges szerintem a két lépés, de ahogyan írtam, ízlések és pofonok.
Avatar
kovacsna
Pákabűvész
Hozzászólások: 208
Csatlakozott: 2008. június 3. kedd, 6:00

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

Tessék:)

megfeleltetés :
1 = portb.0
2 = portb.1
.
.
15 = portc.7

Kód: Egész kijelölése

$regfile = "m168def.dat"
$crystal = 8000000
$baud = 9600
$hwstack = 80
$swstack = 80
$framesize = 80
$sim

config com1 = dummy

Config Portb.0 = Output
Config Portc.0 = Output

Declare Sub Csatik(byval Adat As Byte)


Dim Bejovo As Byte


Do

If Inkey() > 0 And Inkey() <= 17 Then

 Bejovo = Inkey()

 Call Csatik(bejovo)

End If


Loop

Sub Csatik(byval Adat As Byte)



   If Adat <= 8 Then

      Adat = Adat - 1

      Portb = 2 ^ Adat

      Wait 1

      Portb = 0

      Else

      Adat = Adat - 9

      Portc = 2 ^ Adat

      Wait 1

      Portc = 0

   End If

   Print Bejovo

   Bejovo = 0

End Sub
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

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

Kód: Egész kijelölése

If ischarwaitting()> then
 Bejovo = Inkey() 
 if bejovo>0 and bejovo<18 then 
  Call Csatik(bejovo) 
End If 

mert mi van ha a dupla if inkey esetén a lenyomott gomb megvaltozik?
Es ha az elso if az inkey()-t kiolvasa, a masodik esetben tuti "" lesz az inkey() erteke.


A kész kódodból a $sim-t vedd ki!
Válasz küldése