Beste

Ik ben bezig met een programmaatje te schrijven in Proton IDE maar ik zit met een klein probleempje.

Ik krijg van de pc een hele boel data aan. Ik dacht het zo op te splitsen. data1,data2,data3,... dus met een , een opsplitsing te maken. Maar nu is de vraag hoe splits ik die data in Proton IDE op bv naar een array.

Als jullie betere oplossingen hebben in verband het zenden van de data hoor ik het graag.

PS: Ter controle tel ik alle data op en verstuur dit getal mee en ik controleer bij de ontvanger of de data overeen komt met die check sum.

Bram

persoonlijk zou ik een (heel) simpele state machine maken.

"als startkarakter, dan positie=0, ontvang is waar"

"als ontvang==hoog, dan sla karakter op in array op positie"

"als ontvang==hoog karakter is scheidingteken, hoog positie op"

"als positie==max, dan bereken som en ontvang = onwaar"

Heeft er iemand in basic een voorbeeldje?

Pseudo picbasic:


  RxBuffer[Index] = Uart_Rx
  Checksum = Checksum + RxBuffer[Index]
  If Index = Max_characters Then
    Uart_Tx(Checksum)
    Index = 0
    Checksum = 0
  Else
    Incr Index
  End If

Picbasic heeft een functie HRSIN + men kan wachten op data met het volgende commando

HSerIn [Wait( "," ) , Str DataInput]

maar het probleem hierbij is dat ik een hele boel data verstuur zo wel bin bit formaat als ook in double word formaat. Hierdoor moet ik moet ik een variabele aanmaken van het type double word. Maar omdat ik 59 elementen heb kom ik op deze manier niet meer toe met mijn geheugen.

Hoe kan ik dit anders oplossen?

59 doublewords is 236 byte.
Bit formaat lijkt me een beetje mal, de kleinste eenheid van transmissie is toch nog altijd een byte.
Je kunt natuurlijk de gegevens in het geheugen proppen met indirect addressing, maar dan moet je bij het uitlezen weer op de scheidingstekens letten.

Wat ben je van plan met die gegevens te doen, misschien kunnen we daar wat mee.

Ik ben van plan om een soort van scada systeem te maken. Ik heb net gekeken en ik heb
- Bit 3
- Byte 41
- Word 9
- Dword 1 is een soort checksum ik tel alle data bij elkaar op en ik verstuur deze som mee en ik contoleer in mijn µC of de waarde overeen komt met de ontvangen data

De bits zullen ook als aparte bytes verzonden woeden dus zijn er eigenlijk 44 bytes

Dus dit geeft een totaal van 66 bytes

Ik heb nu nog maar 117 bytes ruimte over dus alles in een doubel word zetten gaat niet lukken :(

[Bericht gewijzigd door bramvr op (18%)]

Waarom zou je je bits, bytes en words dan ook in double words zetten? Dat kan namelijk respectievelijk 32x kleiner, 4x kleiner en 2 keer kleiner...

Omdat ik het eerst met deze functie wou maken

HSerIn [Wait( "," ) , Str DataInput]

waardoor ik alles in een double word moet zetten omdat ik 1 variabele heb van het double word type.

Ik weet dat het anders kan maar ik weet niet hoe ;)

Ik zou iets moeten hebben waar ik de data kan splitsen bij een "," en deze in variabele zetten maar ik moet rekening houden met de verschillende formaten van data zodat ik deze data in een array kan zetten.

[Bericht gewijzigd door bramvr op (29%)]

Heeft er iemand een oplossing voor dit probleem want ik kom er maar niet uit :p

Ik neem aan dat HSerIn toch ook wel bytes in zal kunnen lezen?

Ja dat wel maar hoe moet ik dat dan doen bij dat double word want alle data komt samen binnen.

Kun je niet je words en dwords bij de computer al opdelen in bytes? Als je in een bekende volgorde verzend kun je de bytes in je uc weer samenvoegen tot words en dwords.

Je kunt toch gewoon de binnenkomende bytes opbergen waar ze thuishoren? Als je weet dat er 4 bytes gaan komen die een dword vormen sla je die gewoon op:
(dit is mikrobasic, maar ik neem aan dat picbasic ook wel iets heeft om de bytes van een dword apart te adresseren)


  HserIn (ByteRx)
  Lo(MyDword) = ByteRx
  HserIn (ByteRx)
  Hi(MyDword) = ByteRx
  ...
  ...