equal
deleted
inserted
replaced
6 .org 0x00 |
6 .org 0x00 |
7 rjmp init |
7 rjmp init |
8 |
8 |
9 .org SPIaddr |
9 .org SPIaddr |
10 rjmp SPI_Interrupt |
10 rjmp SPI_Interrupt |
|
11 |
|
12 .org ADCCaddr |
|
13 rjmp ADC_Interrupt |
11 |
14 |
12 ;; SPI |
15 ;; SPI |
13 .equ SPI_DDR = DDRB |
16 .equ SPI_DDR = DDRB |
14 .equ SPI_PORT = PORTB |
17 .equ SPI_PORT = PORTB |
15 .equ SPI_SCK = PORTB5 |
18 .equ SPI_SCK = PORTB5 |
173 com r16 |
176 com r16 |
174 |
177 |
175 ; Display |
178 ; Display |
176 rjmp SPI_Send |
179 rjmp SPI_Send |
177 |
180 |
178 |
181 ;; ADC |
|
182 .equ ADC_DDR = DDRC |
|
183 .equ ADC_PORT = PORTC |
|
184 .equ ADC_PIN = PORTC0 |
|
185 |
|
186 ;; Initialize the ADC for starting conversions |
|
187 ADC_Init: |
|
188 ; Setup ADMUX |
|
189 ; Use AVcc as ref |
|
190 ; Left-adjust result (for 8-bit access) |
|
191 ; Select ADC0 |
|
192 ldi r16, (0b01 << REFS0) | (1 << ADLAR) | (0b000 << MUX0) |
|
193 sts ADMUX, r16 |
|
194 |
|
195 ; Setup ADCSRB |
|
196 ; Free-running mode |
|
197 ldi r16, (0b000 << ADTS0) |
|
198 sts ADCSRB, r16 |
|
199 |
|
200 ; Setup ADCSRA |
|
201 ; Enable |
|
202 ; Start right away... |
|
203 ; Auto-trigger |
|
204 ; Enable Interrupt |
|
205 ; Scale 1/128 |
|
206 ldi r16, (1 << ADEN) | (1 << ADSC) | (1 << ADATE) | (1 << ADIE) | (0b111 << ADPS0) |
|
207 sts ADCSRA, r16 |
|
208 |
|
209 ; Disable digital circuit for pin |
|
210 ldi r16, (1 << ADC_PIN) |
|
211 sts DIDR0, r16 |
|
212 |
|
213 ; Debug LED |
|
214 sbi DDRD, PORTD7 |
|
215 sbi PORTD, PORTD7 |
|
216 |
|
217 ; Done |
|
218 ret |
|
219 |
|
220 ADC_Interrupt: |
|
221 ; Off |
|
222 cbi PORTD, PORTD7 |
|
223 |
|
224 ; Done |
|
225 reti |
|
226 |
|
227 ;; Read the current 8-bit ADC sample |
|
228 ; Returns value in r16 |
|
229 ADC_Read8: |
|
230 ; Copy |
|
231 lds r16, ADCH |
|
232 |
|
233 ; Done |
|
234 ret |
179 |
235 |
180 ;; Delay for approx. one second |
236 ;; Delay for approx. one second |
181 Delay_1s: |
237 Delay_1s: |
182 ; 40 * 64k = 2.6M loops |
238 ; 40 * 64k = 2.6M loops |
183 ldi r20, 40 |
239 ldi r20, 40 |
253 _spin_next: |
309 _spin_next: |
254 ; display |
310 ; display |
255 mov r16, r24 |
311 mov r16, r24 |
256 rcall LCD_ShowRaw |
312 rcall LCD_ShowRaw |
257 |
313 |
258 ; short delay |
314 ; variable delay -> r16 |
259 ldi r20, 6 |
315 rcall ADC_Read8 |
260 ldi r21, 255 |
316 |
|
317 ; short delay, from ADC |
|
318 mov r20, r16 |
|
319 ldi r21, 1 |
261 rcall ShortDelay |
320 rcall ShortDelay |
262 |
321 |
263 ; next segment |
322 ; next segment |
264 lsl r24 |
323 lsl r24 |
265 |
324 |
278 out SPL, r17 |
337 out SPL, r17 |
279 |
338 |
280 ; Enable interrupts |
339 ; Enable interrupts |
281 sei |
340 sei |
282 |
341 |
|
342 ; ADC (slowest to start up) |
|
343 rcall ADC_Init |
|
344 |
283 ; SPI |
345 ; SPI |
284 rcall SPI_Init |
346 rcall SPI_Init |
285 |
347 |
286 ; LCD (requires interrupts) |
348 ; LCD (requires interrupts, blocks) |
287 rcall LCD_Init |
349 rcall LCD_Init |
288 |
350 |
289 ; Run |
351 ; Run |
290 ; spin! |
352 ; spin! |
291 rcall Main_Spin |
353 rcall Main_Spin |