kontrollera Seriell port med JAVA

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

kontrollera Seriell port med JAVA

Inlägg av jesse »

Hej.

Jag funderar på att bygga en AD-omvandlare som jag kan ansluta till en PC ,t ex. med den färdiga kretsen MAX 186
Seriell 12-bitars 8-kanals A/D med track and hold
Fabr Maxim
Komplett datainsamlingssystem med mycket låg strömförbrukning. Ingångarna kan konfigureras mjukvarumässigt. Serieinterfacet är kompatibelt med SPI, QSPI, Microwire och TMS 320.
och har funderat på hur jag ska kunna kommunicera med serie- eller parallell-porten. Jag vill att utrustningen ska vara plattformsoberoende (själv har jag olika datorer med olika versioner av Windows och Linux), så jag har valt att försöka lära mig JAVA-programmering.

Lättare sagt än gjort. Det verkar vara en djungel med paket för allt tänkbart, och att fatta den dokumentationen är bara för mycket för mig!

Nu har jag fått reda på att det ska finnas ett javax.comm paket, men jag vet inte om jag kan styra/läsa direkt på porten.. det verkar som om det handlar om input / output streams, dvs. seriell data enligt en viss standard. Om jag vill kunna styra t.ex några reläer direkt på RS-323 utgången så funkar ju inte det. Jag vill kunna sätta databitarna manuellt.

Är den nån som har nån vana vid JAVA och som gjort/använt nåt program som kommunicerar med en port direkt? Jag tänker t.ex. på RS-232 porten som oftast inte använd till något annat. Skulle gärna vilja se några exempel så att jag kommer igång.
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Sätt en processor (AVR, PIC eller något annat) som interface mellan
omvandlaren och RS232. Sedan är det enkelt. Du skulle även kunna
används ADC'n i processorn direkt och skippa MAX kretsen...
Användarvisningsbild
Icecap
Inlägg: 26612
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Bara ett förtydligande: med "seriell" menas (i denna krets) SPI eller liknande, alltså INTE "vanlig UART"-kommunikation. Om du ska kommunicera via en serieport (UART) måste du ha en del emellan och då är det lika bra att ta en mikroprocessor med A/D-omvandlare och UART inbyggd.
Användarvisningsbild
ucadv
Inlägg: 203
Blev medlem: 29 januari 2007, 23:13:49

Inlägg av ucadv »

kika på den här ...
http://java.sun.com/products/javacomm/r ... index.html
... och den här sidan
http://www.java2s.com/Code/Java/Develop ... M-Port.htm


tänk på att din krets kör med "Seriell 12-bitars" vilket inte är RS-232. Du kanske kan använda parallellporrten istället och "bit banga":

http://en.wikipedia.org/wiki/Bit-banging
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Inlägg av Micke_s »

FTDIchip FT2232 har "bitbang" motor i sig redan.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Inlägg av jesse »

tänk på att din krets kör med "Seriell 12-bitars" vilket inte är RS-232. Du kanske kan använda parallellporrten istället och "bit banga":
hur gör jag med parallellporten då? Det är inte bara den kretsen jag vill kunna kommunicera med utan p princip allt tänkbart som kan gå på ström (AD/DA omvandlare, reläer, logik-kretsar mm...) så frågan är generell... hur jag sätter enstaka (eller flera samtidigt) bitar till 1 eller 0 respektive läser in 1 eller 0 från ett stift.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Inlägg av jesse »

Har ändrat mig och kommer att använda en AVR microprocessor. Antagligen AtMega48.

Så det är kretsens UART man bör använda - det är väl standardformatet som även funkar i RS232 antar jag (förutom att jag måste omvandla till +- 12V) ?

Om jag bara har +5 V matningspänning - hur kan jag omvandla till +/- 12V som behövs? Finns det matningspänning från datorn på RS232-uttaget så jag kan använda den för att driva utgången? Jag behöver väl inte anslut något annat än RxD och TxD?
eqlazer
Inlägg: 923
Blev medlem: 22 september 2007, 13:53:45
Ort: Göteborg

Inlägg av eqlazer »

Använd en max232.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Inlägg av jesse »

max232... ska kolla upp den.

projektet har ändrat karaktär en aning.. ska använda flera ingångar och bearbeta en del data innan jag sänder.

angående seriell data till och från PC: behövs det nåt särskilt protokoll eller är det upp till mig att bestämma hur kommunikationen ska ske? Finns det stndardsätt att sköta sån kommunikation som den nedan, eller är det bara att programmera fritt?

(antar att jag kan göra hur jag vill ,men tänkte att en standard kanske kan få programmet mer begripligt + att jag får en viss logik i kommunikation + datalagring)

t.ex. ska PC skicka instruktioner till µC om vad som ska utföras som ska skickas t.ex.


A) skicka data i realtid i viss hastighet från AD-ingångarna.
här ska µC även kunna skicka larm vid vissa inställda nivåer etc..
B) ladda upp tidigare loggad data till PC.
C) ändra språk i displayen (t.ex)
D) Ställ in larmnivåer mm...
E) kalibrera AD mot given spänning
F) osv....
G) spara ändringar
H) exit...

Är timingen viktigt vid UART? Måste jag använda kristall eller duger inbyggd RC-oscillator i AVR'en?
hh
Inlägg: 322
Blev medlem: 9 maj 2006, 12:37:32
Ort: Karis, Finland

Inlägg av hh »

De AVR som har högre klockfrekvens brukar klara sig med den interna oscillatorn.

Protokoll kan du nog ganska fritt hitta på, det finns alla upptänkliga varianter...

Enklast tycker jag det är att använda teckenbaserad (här i mtsats till binär) överföring, då kan man enkelt använda terminalprogram, och streamarna i applikationerna är lätta att hantera.

Ett tips är att använda teckensekvenser i början (och eventuellt i slutet) av överföringarna, det gör programmerandet betydligt lättare.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Inlägg av jesse »

Ett tips är att använda teckensekvenser i början
du tänker t.ex att man börjar varje "ny" överföring med en kod som anger vad för data som kommer att sändas... samt en "stoppkod" som är lätt att detektera för att kunna strukturera upp datan som kommer in?
hh
Inlägg: 322
Blev medlem: 9 maj 2006, 12:37:32
Ort: Karis, Finland

Inlägg av hh »

Just så. Logiken i systemet lönar det sig att fundera lite extra över så den blir vettig.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Inlägg av jesse »

Jag brukar göra så... jag har alltid uppfunnit protokoll efter eget huvud ... jag funderade bara på om det fanns något "traditionellt" sätt att strukturera data på (typ radslut = 13+10 ) som alla följer och därmed gör det lättare att skriva program åt andras hårdvara och vice versa......
hh
Inlägg: 322
Blev medlem: 9 maj 2006, 12:37:32
Ort: Karis, Finland

Inlägg av hh »

> som alla följer och därmed gör det lättare att skriva program åt andras hårdvara och vice versa.....

:lol: :lol: :lol:

Ja det skulle man tycka, men sådana finesser verkar de som gör serieansluten utrustning inte vara så intresserade av... (13+10) är i alla fall rätt vanligt och brukar fungera bra (läs: de flesta färdiga rutinerna klarar det, åtmistone på något sätt).

Jag har gjort en hel del applikationer för mätutrustning, och kan tipsa om att 9600, 8N1 är en ganska vanlig överföringshastighet då inte högre krävs, normalt brukar jag börja med det då någon okänd apparat skall testas.[/b]
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Inlägg av jesse »

typ det här t.ex är en mall man kan följa:


The UART synchronization method

In a network consisting of one master node and several slave nodes, the master node
is responsible for controlling all communication on the bus. Communication occurs by
sending message frames on the bus. Every message frame starts with a frame
header, initiated by the master node. The header starts with a BREAK and SYNCH
pattern, allowing slave nodes to synchronize to the master before any communication
on the bus is initiated.

The BREAK/SYNCH pattern consists of:

• BREAK signal: At least 13 bit times of dominant (low) value. See Figure 3-1.
• BREAK DELIMITER: At least 1 bit time of recessive (high) value. See Figure 3-1.
• SYNCH byte: A 0x55 is transmitted. Including the start and stop bits, this results in
a transmitted bit pattern of 0101010101. (Note that the bit-
transmission order is lsb first).

After the SYNCH byte, an identifier is transmitted. The identifier uniquely defines
which slave node is supposed to transmit data on the bus, and what information is
requested from that slave node.
Skriv svar