SchemaTheek
 
Home Nieuws Forum Schema's Artikelen Magazine Downloads Links Shops Zoeken
 
Controle Paneel
Gebruikersnaam
Wachtwoord
  Onthoud mij
» Wachtwoord?
» Registreren
Site info
» Het Team
» Contact
» FAQ
» Leden
» Upload Archief
Stats
Totaal online: 20
20 gasten
0 leden:
Forum > Digitaal > JAL code naar Picbasic (proton IDE)
[1] 2 3 4 5 »
pascalbianca
Lid
Berichten: 1394
Gepost op woensdag 18 December 2013 14:28:00 QuoteWijzig

Ik wil een code die in JAL is geschreven omzetten naar picbasic.

Nu heb ik nooit met JAL gewerkt dus zou wat hulp kunnen gebruiken.

In de JAL code word een lib. ingeladen voor een mcp23008, hoe doe ik dit in picbasic?


http://pascalbianca.blogspot.nl/
Stynus
Admin
Berichten: 2773
Gepost op woensdag 18 December 2013 16:57:14 QuoteWijzig

Kan je die jal code posten?


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
pascalbianca
Lid
Berichten: 1394
Gepost op woensdag 18 December 2013 17:41:46 QuoteWijzig


Code
 -- JAL 2.0.4
    include 16f648a_bert
    include i2c
    include mcp23008

    var byte data = 0
    var byte groep = 0



    var volatile bit Ch1 at groep : 0
    var volatile bit Ch2 at groep : 1
    var volatile bit Ch3 at groep : 2
    var volatile bit Ch4 at groep : 3
    var volatile bit Ch5 at groep : 4
    var volatile bit Ch6 at groep : 5
    var volatile bit Ch7 at groep : 6
    var volatile bit Ch8 at groep : 7


    mcp23008_write(0b_0100_001,5, 0b_0001_0010)
    mcp23008_write(0b_0100_001,0, 0b_0000_0000)

    forever loop


                 while ! serial_hw_read(data)loop
                 end loop
                                 if data == 11 then
                                 ch1 = 1
                                 mcp23008_write(0b_0100_001,9,groep)
                                 end if

                                 if data == 10 then
                                 ch1 = 0
                                 mcp23008_write(0b_0100_001,9,groep)
                                 end if

                                     if data == 21 then
                                     ch2 = 1
                                     mcp23008_write(0b_0100_001,9,groep)
                                     end if

                                     if data == 20 then
                                     ch2 = 0
                                     mcp23008_write(0b_0100_001,9,groep)
                                     end if

                                 if data == 31 then
                                 ch3 = 1
                                 mcp23008_write(0b_0100_001,9,groep)
                                 end if

                                 if data == 30 then
                                 ch3 = 0
                                 mcp23008_write(0b_0100_001,9,groep)
                                 end if

                                     if data == 41 then
                                     ch4 = 1
                                     mcp23008_write(0b_0100_001,9,groep)
                                     end if

                                     if data == 40 then
                                     ch4 = 0
                                     mcp23008_write(0b_0100_001,9,groep)
                                     end if


                                 if data == 51 then
                                 ch5 = 1
                                 mcp23008_write(0b_0100_001,9,groep)
                                 end if

                                 if data == 50 then
                                 ch5 = 0
                                 mcp23008_write(0b_0100_001,9,groep)
                                 end if

                                     if data == 61 then
                                     ch6 = 1
                                     mcp23008_write(0b_0100_001,9,groep)
                                     end if

                                     if data == 60 then
                                     ch6 = 0
                                     mcp23008_write(0b_0100_001,9,groep)
                                     end if

                                 if data == 71 then
                                 ch7 = 1
                                 mcp23008_write(0b_0100_001,9,groep)
                                 end if

                                 if data == 70 then
                                 ch7 = 0
                                 mcp23008_write(0b_0100_001,9,groep)
                                 end if

                                     if data == 81 then
                                     ch8 = 1
                                     mcp23008_write(0b_0100_001,9,groep)
                                     end if

                                     if data == 80 then
                                     ch8 = 0
                                     mcp23008_write(0b_0100_001,9,groep)
                                     end if


    end loop


http://pascalbianca.blogspot.nl/
Stynus
Admin
Berichten: 2773
Gepost op woensdag 18 December 2013 20:59:32 QuoteWijzig

Er zal dan ergens op je pc een bestandje staan dat mcp23008 noemt. De inhoud hiervan moet je dan ook vertalen.

Bij de subroutines aan te roepen worden hier variabelen meegegeven. In nieuwe versies van picbasic kan dit ook als je een 18F pic gebruikt.


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
pascalbianca
Lid
Berichten: 1394
Gepost op donderdag 19 December 2013 11:07:34 QuoteWijzig

Dat klopt, maar zou mij iemand kunnen helpen hiermee want dat JAL heb ik gisteren naar het plaatsen van mijn vorig bericht zitten te lezen maar snap er echt niet veel van.


http://pascalbianca.blogspot.nl/
pascalbianca
Lid
Berichten: 1394
Gepost op donderdag 19 December 2013 16:32:05 QuoteWijzig

Uiteraard heb ik niet stil gezeten en heb reeds een deel code (hierboven al getoont in JAL) geprobeerd om te zetten.
Het enigste is dat die if statemends volgens mij ook in een select case kunnen, dus als iemand een betere oplossing heeft dan hoor ik het graag.
Het eerste stukje klopt niet van de pic instellingen , maar dat moet ik even van het JAL nakijken.


Code

'****************************************************************
'*  Name    : test433.BAS                                       *
'*  Author  : Pascal Schuffelers                                *
'*  Notice  : Copyright (c) 2013 Pascal Schuffelers             *
'*          : All Rights Reserved                               *
'*  Date    : 18-12-2013                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
'Config
    Device 16F648A               
    Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_ON
    All_Digital TRUE                ;Alle ingangen digitaal
'****************************************************************

'****************************************************************    
'Decraraties voor programma:  
  Dim groep As Byte 
  Dim dataS As Byte
  
  groep = 0
  dataS = 0
 
'****************************************************************

'Symbolen:
Symbol Ch1 = groep.0
Symbol Ch2 = groep.1
Symbol Ch3 = groep.2
Symbol Ch4 = groep.3
Symbol Ch5 = groep.4
Symbol Ch6 = groep.5
Symbol Ch7 = groep.6
Symbol Ch8 = groep.7

'****************************************************************   
Clear


   ;Hoofdprogramma
While 1 = 1                   ;Oneindige lus
    If Data = 11 Then
       Ch1 = 1
       mcp23008_write(0b_0100_001,9,groep)
    End If
    
    If Data = 10 Then
       Ch1 = 0
       mcp23008_write(0b_0100_001,9,groep)
    End If
    
    If Data = 21 Then
       Ch2 = 1
       mcp23008_write(0b_0100_001,9,groep)
    End If        
    
    If Data = 20 Then
       Ch2 = 0
       mcp23008_write(0b_0100_001,9,groep)
    End If
    
    If Data = 31 Then
       Ch3 = 1
       mcp23008_write(0b_0100_001,9,groep)
    End If
    
    If Data = 30 Then
       Ch3 = 0
       mcp23008_write(0b_0100_001,9,groep)
    End If
    
    If Data = 41 Then
       Ch4 = 1
       mcp23008_write(0b_0100_001,9,groep)
    End If
    
    If Data = 40 Then  
       Ch4 = 0
       mcp23008_write(0b_0100_001,9,groep)
    End If
    
    If Data = 51 Then
       Ch5 = 1
       mcp23008_write(0b_0100_001,9,groep)
    End If
    
    If Data = 50 Then
       Ch5 = 0
       mcp23008_write(0b_0100_001,9,groep)
    End If
    
    If Data = 61 Then
       Ch6 = 1
       mcp23008_write(0b_0100_001,9,groep)
    End If
    
    If Data = 60 Then
       Ch6 = 0
       mcp23008_write(0b_0100_001,9,groep)
    End If
    
    If Data = 71 Then
       Ch7 = 1
       mcp23008_write(0b_0100_001,9,groep)
    End If
    
    If Data = 70 Then
       Ch7 = 0
       mcp23008_write(0b_0100_001,9,groep)
    End If
    
    If Data = 81 Then
       Ch8 = 1
       mcp23008_write(0b_0100_001,9,groep)
    End If
    
    If Data = 80 Then
       Ch8 = 0
       mcp23008_write(0b_0100_001,9,groep)
    End If
Wend

End


 
[Bericht gewijzigd door pascalbianca op Donderdag 19 December 2013 16:32:47]


http://pascalbianca.blogspot.nl/
Stynus
Admin
Berichten: 2773
Gepost op donderdag 19 December 2013 19:43:24 QuoteWijzig

Als je de inhoud van dat mcp23008 bestandje ook even post dan kan ik wel eens kijken of ik het kan helpen te vertalen.


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
pascalbianca
Lid
Berichten: 1394
Gepost op donderdag 19 December 2013 20:12:28 QuoteWijzig

Als dat zou kunnen graag.
De code van de mcp23008.jal bestand is.:

Code



procedure mcp23008_write(byte in address, byte in register, byte in data) is

  -- write data to a register in the mcp23008 i/o expander
  i2c_put_write_address( address )
  -- register
  i2c_put_data(register)
  i2c_wait_ack
  -- data for that register
  i2c_put_data(data)
  i2c_wait_ack
  -- say no more data to send
  i2c_put_stop

end procedure

procedure mcp23008_read(byte in address, byte in register, byte out data) is

  -- read data from a register in the mcp23008 i/o expander
  i2c_put_write_address( address )
  -- register
  i2c_put_data(register)
  i2c_wait_ack
  -- switch to reading
  i2c_put_read_address( address )
  -- data from that register
  i2c_get_data(data)
  -- say no more data to get
  i2c_put_stop

end procedure



http://pascalbianca.blogspot.nl/
Stynus
Admin
Berichten: 2773
Gepost op donderdag 19 December 2013 23:16:10 QuoteWijzig

Dat bovenste stuk kan je denk ik vervangen door:
I2Cin Dpin, Cpin, address, register, [data]

Dat onderste stuk door
I2Cout Dpin, Cpin, address, register, [data]

 
[Bericht gewijzigd door Stynus op Donderdag 19 December 2013 23:16:22]


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
pascalbianca
Lid
Berichten: 1394
Gepost op vrijdag 20 December 2013 22:39:26 QuoteWijzig

Oke heb die commando's ook eens gebruik bij een shift register dus die heb ik in mijn archief even opgezocht, daar kan ik mee verder.
Toevallig die andere code al kunnen nakijken?


http://pascalbianca.blogspot.nl/
Stynus
Admin
Berichten: 2773
Gepost op zaterdag 21 December 2013 11:04:34 QuoteWijzig

Die mcp23008_write(0b_0100_001,9,groep) in je andere code moet je nog vervangen

Je kan denk ik best 3 variabelen gebruiken
bovenaan:
dim address as byte
dim register as byte
dim data as byte

Waar je de sub wil aanroepen:
address = %01000010
register = 9
data = groep
gosub mcp23008_write

of voor uit te lezen:
address = %01000011
register = 9
data = groep
gosub mcp23008_read


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
pascalbianca
Lid
Berichten: 1394
Gepost op zaterdag 28 December 2013 00:17:29 QuoteWijzig

pffffffff ben toch de gehele tijd ermee bezig maar het wil niet echt lukken, weet niet zo zeer hoe ik met die code het beste kan beginnen


http://pascalbianca.blogspot.nl/
Stynus
Admin
Berichten: 2773
Gepost op zaterdag 28 December 2013 10:53:17 QuoteWijzig

Gewoon stapje voor stapje beginnen. Eerst proberen de ic aan te sturen (gewoon in de main loop). Werkt dit, dan deze aanstuur routines overzetten in subroutines.


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
Henk (NL)
Lid
Berichten: 263
Gepost op zaterdag 28 December 2013 12:45:19 QuoteWijzig

Aanvulling;

Hier wordt het e.e.a uitgelegd, het is natuurlijk niet compleet maar een goeie start
www.picbasic.co.uk/forum/showthread.php?t=11453

Lees vooral de reactie #13 van Melanie

pascalbianca
Lid
Berichten: 1394
Gepost op zaterdag 28 December 2013 20:03:23 QuoteWijzig

Ik heb eens een stukje code geprobeerd dat zou op de 433mhZ zender werken met 9600 baud, maar er gebeurd totaal niets.
Het ledje dat op port b7 zou moeten gaan branden doet niets.
Of ziet iemand een fout in mijn code hieronder?


Code
Device 16F648A                                   

Xtal = 20
All_Digital TRUE                                  

' Main Program INCLUDES sub files 
'Include "MCP23008.inc"


'TRIS sequence 7-6-5-4-3-2-1-0
'1 = input and 0 = output
TRISA = %00100000    '                              
TRISB = %00001110    '                             
Symbol LED1 = PORTB.7         ;Poort B.7 heeft nu de naam LED1
Symbol LED2 = PORTB.6         ;Poort B.6 heeft nu de naam LED2

Dim Var1 As Byte
          
Hserial_Baud = 9600        ' Set baud rate to 9600
Hserial_RCSTA = %10010000  ' Enable serial port and continuous receive
Hserial_TXSTA = %00100000  ' Enable transmit and asynchronous mode 
Hserial_Clear = On         ' Optionally clear the buffer before receiving

Loop:
'HSerIn , Timeout , Timeout Label  ,  Parity Error Label , [Modifiers , Variable {, Variable... }]
HSerIn 1000 , Timeout , [Var1] ' Receive a byte serially into VAR1
If Var1 = 11 Then
     Toggle LED1
 'send i2c command to mcp23008 but i don't know how to write the code.
EndIf
Timeout:
GoTo Loop ' Loop forever
End


http://pascalbianca.blogspot.nl/
Henk (NL)
Lid
Berichten: 263
Gepost op zaterdag 28 December 2013 20:52:00 QuoteWijzig

Om te weten wat de inhoud is van 'Var1' dan had je juist bv. de instructie;
Print At 1, 1, Dec Var1
Beter kunnen laten staan, zie blz. 329 van PicBasic.

Ik weet niet of je scoop hebt, maar daarmee kun je bv. zien hoe-of-wat de 433MHz zender serieel verstuurd, en wat op de serie poort binnenkomt.


 
[Bericht gewijzigd door Henk (NL) op Zaterdag 28 December 2013 20:53:49]

pascalbianca
Lid
Berichten: 1394
Gepost op zaterdag 28 December 2013 21:01:44 QuoteWijzig


Quote
Print At 1, 1, Dec Var1


Die regel heb ik niet in gebruik omdat ik geen lcd op die print heb.
Een scoop heb ik maar die is zo oud en heeft zoveel opties dat ik die nog niet geheel onder controle heb.


http://pascalbianca.blogspot.nl/
Henk (NL)
Lid
Berichten: 263
Gepost op zaterdag 28 December 2013 21:11:06 QuoteWijzig

Ik begrijp het wel dat je geen LCD nodig hebt, maar in 'debug' stadium is dit denk ik, een must.
Later als alles werkt kun je dit weer verwijderen.

Anders kun je bv. zo doen;

Code

If Var1 = 11 Then
Toggle LED1



Omzetten naar;


Code

Clear     ' vooraan in de code, onder DIM instructie
Low Led2  
..
..
If Var1 = 11 Then
Toggle LED1
Else 
Toggle LED2
EndIf

reddevil
Lid
Berichten: 1221
Gepost op zaterdag 28 December 2013 21:19:59 QuoteWijzig

Zonder LCD is dit hopeloos. Bouw het geheel op op een beadbord desnoods om er even een LCD erop te hangen.
Bij een hele simpele schakeling, ledjes laten pinken, looplicht gebruik ik ook geen lcd, maar als je met seri?le verbindingen en meer begint kan je niet zonder om te zien welke waarde sommige variabelen hebben. Soms laat ik op het scherm iets simpel afdrukken zodat ik weet of hij door een bepaalde subroutine gaat.


Veel te weinig tijd voor mijn projecten of heb ik er soms te veel?
Stynus
Admin
Berichten: 2773
Gepost op zaterdag 28 December 2013 23:39:23 QuoteWijzig

Probeer eens eerst zonder die "If Var1 = 11 Then", dan zie je al of er iets binnenkomt.

Ik weet niet welke modules je hebt, maar de meeste van die goedkope geraken niet hoger dan 2400baud.

Probeer anders eens met een pc en een max232 ipv die ontvanger. Dan heb je meer controle over het signaal dat op de pic toekomt.


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
pascalbianca
Lid
Berichten: 1394
Gepost op zondag 29 December 2013 10:22:32 QuoteWijzig

Ja ben nu bezig het geen dat ik op het breadboard heb staan even om te zetten om een print te maken, dan heb ik het breadboard weer vrij om jullie tips te test.


Quote
Ik weet niet welke modules je hebt, maar de meeste van die goedkope geraken niet hoger dan 2400baud.



Nou deze is dus niet zo een goedkope print, ik maak namelijk gebruik van de ER400RS-02 (41.95 euro) als zender gebruik ik de ER400TRS (51 euro).
Het zender gebeuren werkt zonder probleem.
Deze heb ik geprogrammeerd op 9600 baud.

Omdat die dingen zo duur zijn heb ik female header gebruikt op die relais kaart om die ER400RS-02 makkelijker eruit te halen.

Maar goed ik ga eerst dus even die print maken en dan een test opstelling maken met lcd.

Ik kom hierop terug als ik deze klaar heb, zal vanavond of morgen zijn.



http://pascalbianca.blogspot.nl/
[1] 2 3 4 5 »

Active Topics

» Subaru Outback 2016
» Stofafzuiging
» Aanpassingen aanbouwde...
» Audi
» Show je mini projecten
» Puls schkelaar
» Draadknipper
» Intercom
» buske (Peugeot Boxer 2...
» Voeding 24V 3A Stynus

» Meer actieve topics

Advertenties

ElektronicaStynus

© 2004-2019 SchemaTheek
Laadtijd: 0.05458 sec.