Ik zit ff helemaal vast, ik heb een stabiele spanninh van 1V op men ADC staan. de adc lees ik in een register en dat zend ik via de UART naar de com poort.
alleen de data die ik op de compoort ontvang is corrupt "rrrrrrrrrrrrr2rrrrrrrrrrrrr2rrrrrrrrrr2rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr2rrr"
ik kan de fout maar niet vinden waarom ik af en toe een "2" ontvang.
aan de bautrate van men UART kan het niet liggen want die staat op 9600 baut, en dan bij je maar een heel kleine kans op fouten. ik weet ook zeker dat de baut constante goed is want die heb ik 10 keer nagerekend waar onder 2 keer met software.
heeft iemand nog 1 idee wat er fout kan zij?
alleen de data die ik op de compoort ontvang is corrupt "rrrrrrrrrrrrr2rrrrrrrrrrrrr2rrrrrrrrrr2rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr2rrr"
ik kan de fout maar niet vinden waarom ik af en toe een "2" ontvang.
aan de bautrate van men UART kan het niet liggen want die staat op 9600 baut, en dan bij je maar een heel kleine kans op fouten. ik weet ook zeker dat de baut constante goed is want die heb ik 10 keer nagerekend waar onder 2 keer met software.
heeft iemand nog 1 idee wat er fout kan zij?
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
| ;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, no paraty
ldi temp,0x86 ;0b10000011
out UCSRC,temp
ldi temp,0x00 ;0b00000000 ;baudrate
out UBRRH,temp
ldi temp,0x19 ;0b00011001 ;baudrate 9600
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:
ready1:
in ADCin, ADCH
sbis UCSRA,UDRE
rjmp ready1
out UDR,ADCin
"!!veel keer NOP!!"
jmp main |