29. marts 2017 - 16:19 Der er 2 kommentarer

ARDUINO UNO - SERIAL INTERRUPT

Hej,

Når min ARDUINO Uno  (den ene af 3)  kører, skal den køre så konstant som overhovedet muligt i et sted mellel 4 og12 timer. Programmet checker nogle højhastigheds serielle data's  (38400 bps) format, og har meget lidt mulighed for at "handshake" med sender.

Dvs. der må HELST ikke forekomme afbrydelser, længere pauser eller strømnedbrug overhovedet.

Men jeg har også brug for at kunne monitorere processen / overførslen. En gang i mellem (typisk 1 gang hver anden time), må jeg finde ud hvor langt  processen er nået. Er der sket en fejl efter 2,05 time er det lidt tåbeligt at vente til 12.' time. Stop ved 4 timer,  check og start igen fra 2' time begynd...

Men det forudsætter at jeg kan "snakke" med UNO'en.

Hvis jeg skal bruge POLL 'metoden (SerialEvent(..) ) har jeg en fornemmelse af at jeg vil miste data.  Så jeg er på jagt efter en SERIAL-INTERRUPT  (RX-interrupt)  -rutine, så UNO kan fange mit keyboard break. Rutinen vil da beregne hvorlangt jeg/den har nået i processen og sende resultatet ud (serial.Write(..) ).

Så spørgsmålet er: Hvor finder jeg en sådan rutine ?

Kristian


.
Avatar billede moddi100 Seniormester
30. marts 2017 - 00:26 #1
Kan du ikke blot få den til periodisk at udskrive status? Eventuelt kan du kigge på noget master-slave opsætning på unoerne. Men prøv at skrive lidt mere om hvordan det hele er opsat.

Hvilke porte kommer data ind på?
Hvad sker der med behandlet data/overførsel?
Er seriel USB til computeren konstant i brug?
30. marts 2017 - 11:32 #2
Hej,

Hardware:  MEGA2560 (MEG) "snakker" med 2 AT328P UC's (U1, U2).
MEG bruger Serial(0)  som komm. til PC.
MEG bruger Serial1 til komm. til U1's Serial(0). 
MEG bruger Serial2 til komm. til U2's Serial(0).
Alle hastigheder /BPS) er 9600.

SOFTWARE:

Jeg sender en kommandostreng med følgende syntaks:

<KOMMANDO>  <SEPARATOR> <CONTROLLER> <SEPARATOR> <KOMMANDOPARAM1> <SEPARATOR> <KOMMANDOPARAM2> <SEPARATOR>
<KOMMANDOPARAM3> <SEPARATOR>

KOMMANDO er enkeltbogstaver  'A' ..'Z' , som fortolkes a MEG og U1 afhængig af
kommandoparam1 -  kommandoparam3. ALtså en kommando kan se sådan ud:

A 01 FFFF 0000 03  <CR>

SEPARATOR er SPACE, COMMA eller <CR> / Carriage Return

CONTROLLER er enten MEG, U1 eller U2 , bestemmes af hexværdien. 

KOMMANDOPARAM1 - KOMMANDOPARAM3 er 2 eller 4 bytes HEXADECIMALE værdier , som bruges som parameter til respektive kommando.

(denne del er ikke færdig endnu !)

OVERORDNET:

De serielle data kommer og hentes ind på MEG serial port 3 .
MEG behandler disse data i overensstemmelse med de give parametre (givet ved kommando-syntaksen (se ovenfor)

EKS:
Byte kombinationen  ' FF FF ' og ' 00 00 '  er en fejl og må ikke forekomme i visse datasekvenser;  det er de forskellige byte (u)-muligheder (afhængig af data-input- (selvfølgelig!) læs: Tape)  jeg vil lægge ind FØR selve kørslen og så er der nogle temperaturmæssige problemer, motorstabilitet, mv.  som jeg også skal tage højde for (en forældet BETAMAX maskine ( jubilæums-maskine - virker hver 10. gang !) som er gammel, slidt og noget ustabil) . Det bliver UC2 som skal virke som HARDWARE-monitor og fyre  interrupt af (parallelt med min time-monitorering) hvis maskinen bliver for varm (Thermistor på en AD ingang)  på VCR 'en, eller hvad fysiske problem der nu måtte opstå. .

Håber dette var tilfredsstilende.

PS: Jeg kunne koble min PC op til opgaven, skrive et Delphi program, som kan det der, men jeg synes også det ville være både udviklende (læs: lærerigt)  og morsommere at prøve om den kombination af 3 ATMEL'ler kunne klare opgaven. Går det galt, Tja, så er der kun PC-løsningen tilbage. 

KR

PPS:  Data på tapene skal ikke regenereres. De er OK.  Det er overførslen fra VCR'en der er opgaven.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester