Задача: плавно регулировать обороты бесколлекторного двигателя, вращая потенциометр, используя ацп, в роли генератора таймер меги. забыл сказать, двигатель работает на микросхеме драйвера lb11872 нужно только подать питание, подать частоту (которую и нужно регулировать) и посадить на землю пин разрешения вращения.
вопросы:1) в режиме непрерывного преобразования, после того как программа заходит в обработчик прерываний ацп, бит adsс сбрасывается в 0, и в 1 не устанавливается, хотя должен как я понял из разных источников, посему я заново прописываю регистр ADCSRA
2) не получается сделать эту самую регулировку, принцип которой- оцифровка, к некоему значению из таблицы прибавляем результат ацп, получаем ячейку либо цыфру (которая +- частоту генератора).
Спойлер
- ;********************************************************************
; 4,0 Ìãö
;********************************************************************
.include "m8def.inc"
;********************************************************************
;********************************************************************
;********************************************************************
;((fclk/(2*êîýô. äåë.))/íóæíóþ ÷àñòîòó)=ÖÛÔÐÓ (timer_c) OCR1AH/L
.def temp= r16 ;
.def temp_1=r17 ;
;********************************************************************
; Èíèöèàëèçàöèÿ êîíòðîëëåðà
;********************************************************************
.org 0 ; Âåêòîð ñáðîñà
rjmp reset ; ïðîöåññîðà
.org OC1Aaddr
rjmp TIM1_COMPAB ; Timer1 CompareA Handler
.org ADCCaddr
rjmp complete // ïåðåõîä ïî ìåòêå
;********************************************************************
reset:
;********************************************************************
;Óñòàíîâêà óêàçàòåëÿ ñòåêà
;********************************************************************
ldi temp, low(RAMEND)
out SPL, Temp
ldi temp, high(RAMEND)
out SPH, Temp
;********************************************************************
;íàñòðîéêà ïîðòîâ
;********************************************************************
ldi temp, 0xFF ; âñå ïîðòû PB
out DDRB, temp ; íà âûõîä
// íàñòðîéêà àöï
ldi r18,0b00100000 //(1<<ADEN)|(1<<ADIE)|(1<<ADFR)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)//âêëþ÷åíèå àöï, ïðåðûâàíèÿ ðàçðåøåíû, äåëèòåëü 128, íåïðåðûâíî
out ADMUX, r18
ldi r18,0b11101110 //(1<<ADLAR)|(1<<REFS1)|(0<<REFS0) //òî÷íîñòü 8 áèò
out ADCSRA, r18
;********************************************************************
; óñòàíîâêà òàéìåðà
;********************************************************************
ldi temp, 0 ;
out TCNT1H, temp ;
out TCNT1L, temp ;
out TCCR1A, temp ;
ldi temp, (1<<WGM12)|(0<<CS12)|(0<<CS11)|(1<<CS10); clk/1,
out TCCR1B, temp ; ðåæèì CTC
ldi temp, high(500) ; ñòàðøèé
out OCR1AH, temp ; áàéò ê.ä.
ldi temp, low(500) ; ìëàäøèé
out OCR1AL, temp ; áàéò ê.ä
ldi temp, (1<<OCIE1A) ; ðàçðåøåíèå ïðåðûâàíèé
out TIMSK, temp ; ïî ñîâïàäåíèþ
ldi temp_1, 0 ; îáíóëèì temp_1
;********************************************************************
;Îñíîâíàÿ ïðîãðàììà
;********************************************************************
sei ; ðàçðåøåíèå ïðåðûâàíèé
loop:
rjmp loop ; âå÷íûé öèêë
;********************************************************************
; îáðàáîò÷èê ïðåðûâàíèé òàéìåðà
;********************************************************************
TIM1_COMPAB: in temp, SREG ; ????????
push temp ; SREG
com temp_1 ;
andi temp_1, 0b11111111 ; îñòàâèì 0-îé áèò
out PORTB, temp_1 ; âûâîä â ïîðò
pop temp ; SREG
out SREG, temp ; âîññòàíîâèì
reti ; âûõîä èç ïðåðûâàíèÿ
;********************************************************************
//îáðàáîò÷èê ïðåðûâàíèé àöï
complete:
in r19,ADCH //çàïèñàòü ïðåîáðàçîâàíèå â ð19
ldi ZL,low(Table*2) //çàïèñàòü â Z Table:
ldi ZH,high(Table*2)
adc ZL, r19//add ZH, r19
//ADC Zl, r19//ê Z + r19 = íóæíóþ ÿ÷åéêó
//ADC ZH, r19
lpm r0, Z //lpm ñ÷èòûâàåò è çàïèñûâàåò â OCR
//movw r20, r0
out OCR1AL,r0
out OCR1AH,r0
//adc ZH,r19
//lpm r21, Z
//out OCR1AH,r21
ldi r18,0b11101110 //(1<<ADLAR)|(1<<REFS1)|(0<<REFS0) //òî÷íîñòü 8 áèò
out ADCSRA, r18
reti
Table:
.dw 625
.dw 624
.dw 623
.dw 622
.dw 621
.dw 620
.dw 619
.dw 618
.dw 617
.dw 616
.dw 615
.dw 614
.dw 613
.dw 612
.dw 611
.dw 610
.dw 609
.dw 608
.dw 607
.dw 606
.dw 605
.dw 604
.dw 603
.dw 602
.dw 601
.dw 600
.dw 599
.dw 598
.dw 597
.dw 596
.dw 595
.dw 594
.dw 593
.dw 592
.dw 591
.dw 590
.dw 589
.dw 588
.dw 587
.dw 586
.dw 585
.dw 584
.dw 583
.dw 582
.dw 581
.dw 580
.dw 579
.dw 578
.dw 577
.dw 576
.dw 575
.dw 574
.dw 573
.dw 572
.dw 571
.dw 570
.dw 569
.dw 568
.dw 567
.dw 566
.dw 565
.dw 564
.dw 563
.dw 562
.dw 561
.dw 560
.dw 559
.dw 558
.dw 557
.dw 556
.dw 555
.dw 554
.dw 553
.dw 552
.dw 551
.dw 550
.dw 549
.dw 548
.dw 547
.dw 546
.dw 545
.dw 544
.dw 543
.dw 542
.dw 541
.dw 540
.dw 539
.dw 538
.dw 537
.dw 536
.dw 535
.dw 534
.dw 533
.dw 532
.dw 531
.dw 530
.dw 529
.dw 528
.dw 527
.dw 526
.dw 525
.dw 524
.dw 523
.dw 522
.dw 521
.dw 520
.dw 519
.dw 518
.dw 517
.dw 516
.dw 515
.dw 514
.dw 513
.dw 512
.dw 511
.dw 510
.dw 509
.dw 508
.dw 507
.dw 506
.dw 505
.dw 504
.dw 503
.dw 502
.dw 501
.dw 500
.dw 499
.dw 498
.dw 497
.dw 496
.dw 495
.dw 494
.dw 493
.dw 492
.dw 491
.dw 490
.dw 489
.dw 488
.dw 487
.dw 486
.dw 485
.dw 484
.dw 483
.dw 482
.dw 481
.dw 480
.dw 479
.dw 478
.dw 477
.dw 476
.dw 475
.dw 474
.dw 473
.dw 472
.dw 471
.dw 470
.dw 469
.dw 468
.dw 467
.dw 466
.dw 465
.dw 464
.dw 463
.dw 462
.dw 461
.dw 460
.dw 459
.dw 458
.dw 457
.dw 456
.dw 455
.dw 454
.dw 453
.dw 452
.dw 451
.dw 450
.dw 449
.dw 448
.dw 447
.dw 446
.dw 445
.dw 444
.dw 443
.dw 442
.dw 441
.dw 440
.dw 439
.dw 438
.dw 437
.dw 436
.dw 435
.dw 434
.dw 433
.dw 432
.dw 431
.dw 430
.dw 429
.dw 428
.dw 427
.dw 426
.dw 425
.dw 424
.dw 423
.dw 422
.dw 421
.dw 420
.dw 419
.dw 418
.dw 417
.dw 416
.dw 415
.dw 414
.dw 413
.dw 412
.dw 411
.dw 410
.dw 409
.dw 408
.dw 407
.dw 406
.dw 405
.dw 404
.dw 403
.dw 402
.dw 401
.dw 400
.dw 399
.dw 398
.dw 397
.dw 396
.dw 395
.dw 394
.dw 393
.dw 392
.dw 391
.dw 390
.dw 389
.dw 388
.dw 387
.dw 386
.dw 385
.dw 384
.dw 383
.dw 382
.dw 381
.dw 380
.dw 379
.dw 378
.dw 377
.dw 376
.dw 375
.dw 374
.dw 373
.dw 372
.dw 371
.dw 370


