[AVR asembly] data err op RS232 van af ADC

Pagina: 1
Acties:

  • kippy
  • Registratie: September 2004
  • Laatst online: 18:22
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?

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

  • Elijan9
  • Registratie: Februari 2004
  • Laatst online: 14-05 10:51
Ik zou zeggen, ga eerst eens zelf nalopen aan welk gedeelte van je code het ligt...
Dus schrijf een toepassing die eindeloos alleen maar data verstuurt over de RS232 poort, en kijk dan of het ook fout gaat. Het kan dan bijvoorbeeld zijn de de baudrate nu net geen 9600 is, maar net iets meer of minder (bijvoorbeeld 10000?)...
Maar het kan ook zijn dat je storing hebt op je datalijnen, om maar wat te noemen. (analoge en digitale circuit niet gescheiden, interne/externe HF storing e.d.). Zet daar dan eens een scoop op...

Alleen door je toepassing op te splitsen, zul je kunnen achterhalen waar het probleem nu echt vandaan komt...

War is when the young and stupid are tricked by the old and bitter into killing each other. - Niko Bellic


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 17-05 17:19
Misschien is je clock niet constant ?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.