02. april 2002 - 11:44Der er
63 kommentarer og 3 løsninger
Sender i vejrballon
Jeg er i gang med et HTX projekt hvor jeg sammen med min partner har valgt at lave en vejrballon. Denne skal fx kunne måle temperaturen et givent sted og så kunne sende signalet digitalt.
Mit spørgsmål er så: Nogen der kan give henvisninger til diagrammer eller anden dokumentation for en sender og modtager. Kravet er blot at signalet skal kunne sendes ganske få meter selv om det i virkeligheden vil være flere kilometrer.
Vi tager også gerne mod ideer til løsningsforslag. fx har vi tænkt os at placere en programmeret chip i ballonen som skal stor indsamling af målinger fra diverse instrumenter i ballonen.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Jeg har brugt nogle færdige radiomoduler (Tx2 og Rx2) fra det engelske firma Radiometrix (www.radiometrix.co.uk). Det er envejs moduler, der kører standard TTL 5V signalniveau, så de kan praktisk talt kobles direkte på en uC. De sender på det licensfrie 433Mhz bånd, og har en rækkevidde på ca. 300m.
Til temperaturmålingen kan man f.eks. bruge nogle færdige digitale temperaturmålere, som f.eks. Dallas DS1621.
Radiomodulerne er ret dyre. Jeg tror de koster en 200kr stykket. Tjek hos Farnell, de forhandler dem. DS1621 koster en 20-30kr.
uC = microcontroller = mikrocomputer
Til temperaturmåling brugte jeg en DS1621 temperatursensor koblet op til en PIC16F84 microcontroller, som igen var koblet til TX2 radiosenderen. DS1621 kommunikerer med en synkron seriel protokol, der hedder I2C og til radiotransmissionen brugte jeg en asynkron seriel protokol opfundet til formålet.
Lyder kompliceret :-) Jeg overvejede om du lavede det i forbindelse med et projekt og så har noget dokumentation/forklaring på hvordan det er konstrueret, eller endnu bedre nogle henvisninger til hvordan jeg kan blive klogere på området? :-)
Et rigtig "dumt" spørgsmål; Når det kun er til demo-brug i forbindelse med et HTX-projekt, og "Kravet er blot at signalet skal kunne sendes ganske få meter", hvorfor bruger I så ikke bare en ledning til at forbinde instrumenterne i balonnen med jeres "jord-computer". Når I alligevel ikke selv laver sender/modtager (må man ikke), vil det undervisningsmæssigt være en lige så god løsning :o)
Jeg er tilbøjelig til at give microtec ret i, at et trådbundet system ville være lige så godt. Der er dog ting, som f.eks. støjindvirkning på radiotransmissionsprotokollen, der ikke kan testes uden radiomoduler. Men det er jo noget du selv må tage stilling til.
Hvis dit måleudstyr f.eks. har en RS232 tilslutning, er det oplagt at forbinde den til COM-porten med en ledning. Det er nøjagtig det samme du ville have gjort med en radiosender/modtager. Et stykke af "ledningen" ville så bare være radiobølger.
Vi har ikke ind til videre noget specielt udstyr, men planen er at vi fx fremstilelr vores eget termometer, trykmåler eller sådan noget. Dette skal så sendes fra vores vejrballon ned til en computer.
Vi tror det bliver for omfattende at benytte TX2 og RX2, og at vi derfor er tilfreds med at kunne sende signalet 1 meter eller sådan noget via en ledning.
Så situationen er at vi har et digitalt signal fra en microchip der skal sendes. dette modtages og videregives til en computer.
Det er ikke ulovlig at overføre data via en ledning.
Det er det derimod, hvis I selv bygger en radiosender (derfor syntes jeg også jeres opgaveoplæg er lidt dårligt). Den sender tm_helmer anbefaler der derimod en færdig typegodkendt sender.
Det lyder helt hen i vejret at sætte HTX-elever til at lave en radiosender. Det centrale i opgaven må da være at udføre en måling af en art, sende den serielt og lagre den i noget statisk hukommelse af en art.
poull -> Du skriver at I har et digitalt signal fra en "microchip", hvad er det for et signal, og er den "microchip" i virkeligheden en PIC-processor fra firmaet Microchip?
tm_helmer >> Ja, det virker ikke særlig gennemtænkt. Havde det ikke været en færdig typegodkendt sender du havde anbefalet, havde jeg råbt højt for længst :o)
poull >> Tror du ikke jeres ambitionsniveau ligger en del ud over et HTX-projekt? Hvis I selv vil lave alle instrumenter til temperaturen/tryk, program til en microcontroller i balonnen, program til en PC på jorden og evt. sender/modtager, er projektet væsentlig større end noget nogen af de HTX-praktikanter jeg gennem tiden har haft, ville kunne lave ;o)
tm_helmer >> jo det er en PIC fra microchip og ja vi ved godt det er lidt over niveau at lave det men vi vil gerne undersøge om det var muligt
microtec >> Jo det kan godt ske at vi sigter lidt højt, men dels regnede vi med at kunne få hjælp til nogle af tingene (fx fra eksperten :) ). Så vi regner ikke med at kunne udvikle det hele. Men som sagt til tm_helmer er dette spørgsmål blot en undersøgelse om det var noget iv regnede med at kunen lave. Og hvis vi vælger ikke at lave det trådløst, men blot sender det via en led, vil vi gerne beskrive overordnet hvordan vi vile have sendt det trådløst. Så ind til videre har vi ikkke undersøgt så meget ville ville blot høre hvad i eksperten havde at sige.
Parallel-porten har desværre kun 5 indgange, nemlig de 5 kontrolsignaler.
Brug en 74HC240, Så kan du læse dine 8 bit af 2 gange. Du bruger en enkelt udgang til at vælge om det er de 4 mest betydende eller mindst betydende bit du vil læse.
Prøv at kikke på http://www.lvr.com/parport.htm Det er et helt bibliotek med informationer om styring og kontrol via parrallelporten.
Jeg skulle ellers mene at du kan sætte parral-porten i en specielt mode og derefter kan man læse via databenene alt pin 2-9. Jeg prøver i øjeblikekt med disse: http://www.specosoft.com/download.html
Jeg skulle mene at hvis jeg sætter $37A til $FF skulle jeg kunne med denne komponent aflæse på $378, altså databenene
poull >> Det er langt fra alle parallle-porte der kan kører bidirektionelt på de 8 data-ben. Jeg har tidligere haft problemer på ældre PCér og mange note-books. Det kan også afhænge af hvordan BIOS er sat op.
<SNIP> The non bi-directional ports were manufactured with the 74LS374's output enable tied permanent low, thus the data port is always output only. When you read the Parallel Port's data register, the data comes from the 74LS374 which is also connected to the data pins. Now if you can overdrive the '374 you can effectively have a Bi-directional Port. (or a input only port, once you blow up the latches output!) </SNIP>
Jeg har lavet en del små måleinstrumenter, der overfører data via parallelporten.
Som tidligere nævnt er der stor forskel på de enkelte porte. Hvis du holder dig til den gode gamle Standard Parallel Port (SPP), vil det virke på så godt som alle PCér.
Jeg har fundet følgende så jeg tror kort sagt at jeg ikke kan for jeg har netop en satelite pro 4200:
Q: I am trying to interface a device to a parallel port, using PS/2 mode (simple bidirectional) and reading data on the parallel port’s Data lines. I have successfully used this device on older AST 386 notebook ports as well as a modified SPP in a desktop computer. When in the PS/2 input mode, the input impedance of the older computers is fairly high, as I would expect if the output latch is truly tri-stated.
The problem I am chasing is with a new Toshiba 420 notebook computer, which professes to have a port which can be configured as a standard bi-directional or an ECP. After I have configured (through setup) the Toshiba port for bidirectional, when I switch from the compatibility mode to the byte (PS/2) mode by writing 2Xh to the port’s Control register, each data pin is pulled up rather strongly to +5 vdc. It requires less than 270 ohms from any data pin to ground (sinking about 4 ma) to be able to read a 0 at the data register. This is certainly not my idea of "tri-state".
Have you ever dealt with such a port and would you believe this could be normal operation?
A: Several people have described this problem to me, always with Toshiba laptops. One possibility is that the Data lines have pullup resistors. The IEEE-1284 standard actually recommends using 1.2K pullups on inputs, "to ensure operation with Level 1 [original] and compatible devices." And an input with a 1.2K pullup would require a driver capable of sinking several milliamperes.
microtec >> Jo jeg har kigget på sinde men jeg har lidt svært ved at finde noget helt kokret, så hvis du kan hjælpe lidt med at finde den bedste komponent og hvordan den bruges ville det være godt :)
Jeg har lige give et tip til, hvordan du kan checke om din software overhovedet virker. Glem din egen hardvare i første omgang og brug en printer til at teste med. Prøv om du kan læse ændring i kontrol-registret når du skifter mellem at printeren er on-line eller off-line.
Det kan enten være din hardware eller din software der ikke virker. Du er nød til at gå lidt systematisk til værks når du fejlfinder, ellers bliver det umuligt at finde fejlen.
Den tekst du har fundet beskriver netop det jeg har sagt flere gange; der er stor forskel på printerporte, specilt på noto-books. Her er det så en Toshiba bærbar der driller.
Jeg vil anbefale at du bruger en stationær PC til dit projekts (helst en "bambus-maskine"). Det er dem der giver færrest problemer fordi de er opbygget nogenlunde ens.
vi sidder også og tester løs, men da vi skal lave det oppe i skolen hvor vi kun har vores bærbar. Hvilke komponenter har du for dem vi har er lidt træls og de dur kun til bi-directionel.
Har du slet ikke læst nogen af de indlæg jeg har postet? Prøv lige at se hvad jeg skrev "16/04-2002 13:59:54"
8-bit input virker kun på ganske få maskiner (slemt med bærbare), derfor skal du bruge en 74HC240, så du kan læse de 8 bit son 2x4 bit via portens kontrol-pins og IKKE data-pins.
JA, du skal benytte SSP-mode.
PS: Toshiba bærbar har ry for at være noget af det med In-compatible hardvære-mæssigt, så det er næste den værste kombination I har valgt.
hmm .. så må vi kigge på sådan en buffer og benytte SSP :)
Jeg sidder i øjeblikekt og leger TDLPortIO version 1.2 der har jeg prøvet at installere den som en ActivX kontrol, men jeg kan ike læse på kontrolbenene. Jeg skrev blot:
komponentnavn.LPTAckwl
men den var altid sat uanset hvad? (Håber ikke jeg begår endnu en dummert :))
Nu er Ack-benet jo ikke det smarteste at benytte. Det skifter kun når printeren giver ack på data der lige er modtaget, kun kanske kortvarigt. Igen læs hvad jeg skriver; Brug Paper-out eller Select. Dem kan du på til at skifte til en statisk stilling.
Jeg kender ikke den pågældende ActivX kontrol. Hvorfor overhovedet benytte ActivX kontrol, når det kan laves som en simpel port-læsning, eller ved brug af en simpel DLL (se mit link oven for).
når jeg læser på kontrolbenene er de alle sammen sat til høj/true og det burde vel ikke?
Hvis du gider at finde en en sådan simpel DLL og lave et meget simpelt delphi program (hvis du kan delphi) hvor du læser fra kontrolbenene, så giver jeg da lidt eksrta point. Ved godt det er noget selv kunen lave, men da jeg ikke kan få det til at virke kan det være at jeg gør noget forkert, så hvis du gad ville det være rart :)
Her har du et lille Delphi-program, som slet ikke bruger nogen ekstern DLL, eller ligende. Det læser kontrolregistret. Jeg har tested det under Win-98 og det burde virke umiddelbart under ME.
Der er en risiko for at kontrol-registeret for en Toshiba ligger på en anden adresse. Det mest almindelige er dog at det er $379 som jeg bruger i mit program.
type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.DFM}
{write a byte to a port} PROCEDURE Out32(PortAddress:smallint;Value:smallint);
var ByteValue:Byte;
begin ByteValue:=Byte(Value); {in-line assembly code begins here} asm {preserve the contents of the dx register} push dx {write ByteValue to PortAddress} mov dx,PortAddress mov al, ByteValue out dx,al {restore the contents of dx} pop dx end; end;
{read a byte from a port} FUNCTION Inp32(PortAddress:smallint):smallint;
var ByteValue : byte;
begin {in-line assembly code begins here} asm {preserve the contents of the dx register} push dx {read ByteValue from PortAddress} mov dx, PortAddress in al,dx mov ByteValue,al {restore the contents of dx} pop dx end; Inp32:=smallint(ByteValue) and $00FF; end;
procedure TForm1.Button1Click(Sender: TObject);
CONST DataOutAdr = $378; CntrInAdr = $379;
begin Label1.Caption := IntToHex(Inp32($379), 2); end;
23/04-2002 14:46:49 beder du mig om at skrive et lille test-program. Det gør jeg fluks, og bruger endda tid på at teste det elektrisk på printerporten også, så jeg er HELT sikker på at det også virker. Du har ikke så meget som givet en eneste kommentar til det. Før du fik test-programmet havde du ellers travlt.
det er fordi vi har haft enormt travlt og jeg undskylder mange gange. Vi valgte at køre i bi-directionel mode på en anden pc for der fik vi det til at virke. jeg skal nok lige dele point ud snart for i har været en stor hjælp :)
Så sørg for alt i verden for at dit hardware ikke bliver tilsluttet en PC, hvor porten ikke kan kører bidirectionel. Gør du det, har du en udgang mod en udgang. Det har TTL-kredse, som en del porte er lavet med, ikke godt af. Længere oppe bragte jeg et link med en advarsel.
Hvis du gider at finde en en sådan simpel DLL og lave et meget simpelt delphi program (hvis du kan delphi) hvor du læser fra kontrolbenene, så giver jeg da lidt eksrta point. </SNIP>
<SNIP> Fortsat svar fra microtec 23/04-2002 15:11:24
Her har du et lille Delphi-program, som slet ikke bruger nogen ekstern DLL, eller ligende. Det læser kontrolregistret. Jeg har tested det under Win-98 og det burde virke umiddelbart under ME. </SNIP>
Næ, men jeg finder det underligt at love ekstra point for derefter lige så stille at lade som ingen ting. Jeg har gentagende gange bedt om feedback på det kode jeg lavede til dig. På intet tidspunkt vendte du tilbage.
Jeg VED koden virker. Jeg har faktisk brugt tid på at teste den af før jeg postede den. Jeg har testet med en kontakt forbundet til printerporten og det VIRKER.
Lad være med at love ekstra point, når du ikke uddeler dem bagefter og lad være med at spilde andres tid med at bede om programeksempler, som du ikke gidder bruge tid på at gevie feedback på.
Jeg testede koden, men da jeg var midt i et eksamensprojekt havde jeg utrolig travlt, så derfor var det ikke med min gode vilje at jeg ikke gav feedback. Grunden til at jeg opgav din kode var at jeg ikke lige kunne få den til at virke, men at min lære fik noget andettil at virke og derfor var jeg nødtil at vælge den dll da jeg ikke havde tid.
Jeg skal da nok lige give lidt ekstra point for det har du da fortjent, og så siger ja da undskyld, men jeg havde ikke lige husket at jeg havde udlovet ekstra, for det var som sagt en meget stresset periode.
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.