Ik ben bezig met een projectje om via adc data in te lezen. deze data stuur ik rechtstreeks via de uart in de micro controllor door naar een rs232 naar usb convertor. deze convertor maakt een viritueele com aan op men pc. hierna lees ik de data van af men viritueele com in via delphi.
men adc staat op 8bit ingesteld en men uard stuurd ook 8 bit door.
ik heb hier informatie overdarcht alleen nu is het probleem dat ik geen binaire waardes terug krijg dis is ook logisch want com is alleen als byte in te lezen op delhpi
het geen wat er gebeurd is het volgende:
als ik men spanning op men adc van 0% tot 50% regel krijg is teld tie in delphi heel mooi op van 0 tot 256 (moet kunnen), wanneer ik nu van 50% tot 100% regel krijg ik weer 0 tot 256 binnen. dit vind ik niet helemaal logisch. ik stuur nammelijk maar een 8 bit code en ik weet zeker dat ik de juiste code naar de uart stuur. Ik heb deze code namelijk ook een keer rechtstreeks naar leds laten sturen. hier was ook echt 0% voeding 0b00000000 en 100% voeding 0b11111111.
heeft iemand eenig idee wat ik fout doe, waarom et niet werkt, of wat ik aan moet passen.
men adc staat op 8bit ingesteld en men uard stuurd ook 8 bit door.
ik heb hier informatie overdarcht alleen nu is het probleem dat ik geen binaire waardes terug krijg dis is ook logisch want com is alleen als byte in te lezen op delhpi
het geen wat er gebeurd is het volgende:
als ik men spanning op men adc van 0% tot 50% regel krijg is teld tie in delphi heel mooi op van 0 tot 256 (moet kunnen), wanneer ik nu van 50% tot 100% regel krijg ik weer 0 tot 256 binnen. dit vind ik niet helemaal logisch. ik stuur nammelijk maar een 8 bit code en ik weet zeker dat ik de juiste code naar de uart stuur. Ik heb deze code namelijk ook een keer rechtstreeks naar leds laten sturen. hier was ook echt 0% voeding 0b00000000 en 100% voeding 0b11111111.
heeft iemand eenig idee wat ik fout doe, waarom et niet werkt, of wat ik aan moet passen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
| ;Bas Jaspers
.device ATmega16
.include "M16def.inc"
;***=====ontvang sttings=============***
;licht = 0b100000001
;temp = 0b100000010
;vocht = 0b100000100
;stof = 0b100001000
;sens bestaant dus altijd uit 0b1xxxx**** dit ontvang ik van uit dhelphie
;*******=====voor ontvangen===****
.equ wlicht = 0b10000001
.equ wthemp = 0b10000010
.equ wvocht = 0b10000100
.equ wstof = 0b10001000
;*****======voor zenden=======*******
.equ clicht = 0b10000001
.equ cstof = 0b11000011
.equ cvocht = 0b11100111
.equ cthemp = 0b11111100
.equ cready = 0b00111111
;******=====regs====*****
.def ADCin = r18
.def temp = r19
.def sens = r17
.def dsens = r16
.def ADCtemp = r24
.def ADCtemp2 = r25
.def ADCout = r23
.def ADCin = r22
.cseg
.org 0x000
rjmp reset
reset:
hdw_init:
ldi temp,high(RAMEND)
out SPH,temp
ldi temp,low(RAMEND)
out SPL,temp
ldi temp,0b00000000
out DDRA,temp
ldi temp,0b00000000
out DDRB,temp
ldi temp,0b00000000
out DDRC,temp
ldi temp,0b00000000
out DDRD,temp
;******=====uart init====******
uart_init:
ldi temp,0x00 ;0b00000000
out UCSRA,temp
ldi temp,0x18 ;0b00011000
out UCSRB,temp
;asyncroon, 1 stop bit, 8 databits, geen paraty
ldi temp,0x86 ;0b10000011
out UCSRC,temp
ldi temp,0x00 ;0b00000000 ;baudrate
out UBRRH,temp
ldi temp,0x19 ;0b00011001 ;baudrate
out UBRRL,temp
;ADCint1
;ADMUX refs1, refs0, adlar, mux4, mux3, mux2, mux1, mux0
;refs1 = 1 , gebruik interne 2,56V ref met externe C op AREF
;refs0 = 1 , gebruik interne 2,56V ref met externe C op AREF
;adlar = 1 , adc uitputlinks geschoven alleen ADCH (8bit)
;mux4..0 = channel en gain select
;ADC0 = 000
;ADC1 = 001
;ADC2 = 010
;ADC3 = 011
;ADC4 = 100
;ADC5 = 101
;ADC6 = 110
;ADC7 = 111
ldi ADCtemp, 0b11100000
out ADMUX, ADCtemp
;ADCint2
;ADCSRA ADEN, ADSC, ADATE, ADIF, ADIE, ADPS2, ADPS1, ADPS0
;ADEN = 1 , zet ADC aan
;ADSC = 1 , start ADC
;ADATE = 1 , free run
;ADIF = 0 , voor free run mode (pol op dit, wanneer 0, leer reg uit)
;ADIE = 1 , converzatie compleet interupt
;prescale = 4m / 16 = 250k
;ADSP2 = 0
;ADSP1 = 1
;ADSP0 = 1
ldi ADCtemp, 0b11110011
out ADCSR, ADCtemp
sei
main: [b]//alles hierboven is initialisatie[/b]
ready1:
in ADCin, ADCH //haal data uit ADC en zet in ADCin
sbis UCSRA,UDRE //zend alleen als zend buffer leeg is
rjmp ready1 //asl zend buffer niet leef is zend niet
out UDR,ADCin //zend data via uart
jmp main |
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| unit test;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,PortInc,ExtCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
const
COM3 : integer = $03E8;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
ind : integer;
begin
OpenCom (Pchar('COM3:9600,N,8,1')); //initialisatie compoort
ind := READBYTE; //lees data in
DTR(1); //klaar om data te ontvangen?
Edit1.Text := FloatToStr(ind);
Button1.Click (); {:= OnClick; }
end;
end. |
[ Voor 5% gewijzigd door kippy op 08-12-2004 13:25 ]