000
17.03.2005, 14:34 Uhr
MaddinNeedsHelp
|
Erstmal ein nettes hallo an alle da draußen
Bin im 6. Semester Bioinformatik und habe folgendes Problem gestellt bekommen, was mir kopfzerbrechen liefert:
ich muss auf eine feste Hardware-Adresse zugreifen und dort register überprüfen, ob sie gesetzt sind oder nicht. Es handelt sich hierbei um eine ISA-Karte und zwar genau um einen A/D-Wandler (Analog/Digital Wandler) welchen ich mit Hilfe eines C-Programmes ansprechen soll. Dazu gehören register setzen und gewisse register löschen.
Ein Kumpel meinte das Ansprechen des Assemblers in C ermögliche es, Hardware adressen anzusprechen. Sowas hab ich aber noch nie gemacht und keinen peil davon
hab aber glücklicherweise auch ein prog-source was allerdings in basic ist und wo das ansprechen der hardware adresse sauuu einfach ist (ich muss es aber in c schreiben...).
Wäre nett wenn ihr mir helfen könntet
C++: |
program DCI14; (* AD/DA Wandlung f65533;r 14 bit Karte DCI-14 *)
(* AD-Kan8222;le dieser Karte ben8221;tigen immer einen definierten Spannungspegel, d.h. offene AD-Eing8222;nge bei dieser Karte unbedingt auf Masse (PC-GND) legen, z.B. 65533;ber einen Pull-down-Widerstand 1 kOhm bei 5 V max. Eingangsspannung *)
uses Crt; const adr: word = $260; (* Basisadresse AD/DA-Wandler *) Aufloesung: real = 5/16384; (* 5 V / 14 Bit = 305 æV *) var i: byte; Wandlerwert: word; Spannung,u1,u2: real;
procedure Analog_in (Kanal_Nr: byte); (* AD-Kanal einlesen *) var j,k,convert: byte; begin port[adr]:=Kanal_Nr; (* Kanal-Nummer 65533;bergeben *) port[adr+1]:=0; (* Register l8221;schen *) for j:=1 to 8 do (* AD-Wandlung starten durch Einlese-Schleife *) begin convert:=port[adr+12]; (* AD-Wandlung low *) for k:=0 to 25 do; (* Verz8221;gerungsschleife *) end; (* Wandlungs-Delay anpassen: hier f65533;r 486DX-40 MHz *) for j:=1 to 8 do begin convert:=port[adr+10]; (* AD-Wandlung high *) for k:=0 to 25 do; (* Verz8221;gerungsschleife *) end; (* Wandlerwert einlesen und *) Wandlerwert:=portw[adr+2] and $3FFF; (* 2 bits im Hi-byte l8221;schen *) Spannung:=Wandlerwert*Aufloesung; end;
(* DA-Kan8222;le sind nach einem Kaltstart des Rechners auf maximalem Ausgangs- spannungspegel ! hier: 5 V *)
procedure Analog_out (Kanal_Nr: byte; Spannung: real); begin case Kanal_Nr of (* Spannung umrechnen und 2 bits im Hi-byte l8221;schen *) 1: portw[adr+4]:=Round(Spannung/Aufloesung) and $3FFF; 2: portw[adr+6]:=Round(Spannung/Aufloesung) and $3FFF; end; end;
begin ClrScr; u1:=3.8; u2:=5.0; (*Hier wird der Wert gesetzt für die beiden Kanäle!!) Analog_out(1,u1); Analog_out(2,u2); writeln('DA-Kanal 1 : ',u1:4:2,' V'); writeln('DA-Kanal 2 : ',u2:4:2,' V'); writeln('Kanal Wandlerwert Spannung'); repeat for i:=0 to 15 do begin Analog_in(i); gotoXY(3,4+i);write(i); gotoXY(8,4+i);write(Wandlerwert:5); gotoXY(23,4+i);write(Spannung:4:2); end; until keypressed; Analog_out(1,0); Analog_out(2,0); end.
|
Gruß
Maddin
Bearbeitung von ao: |
quote-Tags durch cpp-Tags ersetzt
|
Dieser Post wurde am 17.03.2005 um 19:20 Uhr von ao editiert. |