Warning: Illegal string offset 'name' in [path]/includes/functions.php on line 6439
Vēlos saņemt mājienu ar sētas mietu pareizajā virzienā -
+
1 2 3

thread: Vēlos saņemt mājienu ar sētas mietu pareizajā virzienā

  1. #11
    Senior Member
    Jul 2010
    pie-Rīga
    2,288

    ATTINY2313 tiks izmantots? Ok, es pa tam lāgam izpētīšu, kāds tam patēriņš un kādu vajag Ubar, un rīt PM detaļas izrunāsim. Ā, patēriņa jamam, kā izskatās, "nav". Tad tik izejā pastiprinoša kaskāde ar lielāku Ubar jāiemontē, lai meandrs uz tiem 6.2V pavilktu un vēl jāizčeko, kas ar to vadības spriegumu. Rīt izlodēšu beigto kontrolieri un paskatīšos, vai var paņemt vadību no MCU izejas, vai no ātruma indikācijas LEDiem.
    Un neskatiet viņu pēc priekšpaneļa spozmes, bet gan vērtējiet viņa transformatora smagumu!

  2. #12
    Senior Member
    Jun 2006
    Cēsu novads
    990

    Barošanu vajag 5V, bet uz tās platītes jau ir mazais 7805, kas var nodrošināt 100mA (šķiet, ka tā pašpatēriņš ir lielāks kā atmelim), + pāris tantāli un keramiskie kondensatori barošanas filtrēšanai. Izeja var nebūt ATTINY kāja, uz tās platītes jau ir tranzistors ar atvērto kolektoru, ja tas der. Vadības ieeja, kas pārslēdz ātrumus - ATTINY iekšējais analogais komparators, nostrādāšanas līmeni var uzlikt jebkādu no 0-5V. Ieejas pretestība vismaz vairāki desmiti kiloomu - domāju pietiekami liela, lai neradītu slodzi signāla avotam.

  3. #13
    Senior Member
    Apr 2007
    2,088

    Kāpēc tik vienkāršu uzdevumu jārisina tik sarežģīti ar taimeriem
    ir taču primitīvā metode ar laika aizkavi
    _delay_ms(5);
    un tad rausta kājap pēc aizkaves.
    Pirmais programmas piemērs, kas man googlē pagadījās:
    https://startingelectronics.org/tuto...rary-function/
    Kāda primitīvai metodei ir kļūda, vai tu vari dot ppm novērtējumu?

  4. #14
    Senior Member
    Apr 2007
    2,088

    Pastāstiet pēc tam par risinājumu - vienkārši interesanti redzēt, kā domā citi. Varbūt, ka manis stāstītais izklausījās sarežģīti, bet uzreiz nevaru iedomāties ļoti vieglu variantu, kurš nodrošinātu labu precizitāti. Tātad, ja man būtu ik pēc 118518/2=59259 CPU taktīm (16MHz/135Hz) jāpārslēdz IO izejas līmenis ar 8 bitu taimeri, tad es taisītu tā:
    - timer prescaler 1, overflow ik pēc 256 taktīm (tāpat jau nepatīkami bieži)
    - 59259 = 256*231 + 123, tātad jāsagaida 231 pilnie 256 taktu pārtraukumi un pēc tam vēl 123 taktis
    - kaut kur 8 bitu skaitītājs, kurš skaita no nulles līdz 230, kuru overflow ISR palielina (vai otrādi)
    - ja vēl nav sasniegts 231, beidzam ISR
    - ja sasniegts, tad steidzami uzstādām OCR uz 123 un atļaujam compare pārtraukumu (patiesībā mazāk par 123, jo noteikts skaits taktu jau ir pagājis)
    - compare pārtraukumā mainām IO stāvokli uz pretējo, atjaunojam 8 bitu skaitītāju, nometam TCNT uz 0, aizliedzam šo pārtraukumu

    Pamatcilpa vispār neko nedara, guļ miegā.

    Elektriski 6.2V izejas nodrošināšanai atkarībā no prasībām var būt prasts open collector + pullup vai tomēr kāds prasts 4000 sērijas CMOS elements ar attiecīgo barošanu.

  5. #15
    Senior Member
    Jun 2006
    Cēsu novads
    990

    ATTINY2313 arī ir 16 bitu taimeris, kas atvieglo dzīvi, tāpēc taisīt uz 8 bitu taimera pat nav vajadzības, bet tīri sporta pēc laikam šoreiz uztaisīšu uz 8 bitu taimera. Paredzamais risinājums praktiski sakrīt ar Karlosa piedāvāto. Ar vienu atšķirību - neizmantotu overflow pārtraukumu bet tikai output compare. Tāpēc, ka var gadīties situācija, kad OCR ir jāuzstāda nevis uz 123, bet teiksim uz 3. Un tad, ja to OCR uzstāda no overflow pārtraukuma, tad tur viss būs nokavēts. Tad tas jāuzstāda jau no iepriekšējā overflow pārtraukuma. Un precīzi jāizrēķina tā robeža, kad jāizmanto šis vai iepriekšējais overflow pārtraukums, Arī izmantojot tikai output compare var gadīties līdzīga problēma. Piemēram: vienā reizē pārtraukums jātaisa pie vecākā skaitītāja vērtības x un taimera vērtības 3, nākošajā reizē, piemēram pie vecākā skaitītāja vērtības y un taimera 7. Atkal - ja pie output compare pārtraukuma izdarīsim vajadzīgo darbību ar IO pinu un pēc tam iestādīsim OCR uz 7, tad to 7 būsim palaiduši garām. 7 vēl nebūtu pats sliktākais variants, to garām palaiduši esam ar garantiju un to var programmā ņemt vērā. Sliktāka būtu cita, lielāka vērtība, par kuru īsti nav skaidrs - esam palaiduši garām vai ne. Protams, arī visu to var precīzi izrēķināt, izskaitīt, cik programmā katra komanda izmanto ciklus un izveidot programmā vairākus variantus - atkarībā no attāluma starp pārtraukumiem. Esmu tā darījis, tas garantēti strādā, bet tas jau gan ir čakars. Šajā gadījumā tas nav vajadzīgs, jo nākošais pārtraukums, kurā jāmaina IO pina stāvoklis nav pie šīs reizes 7, bet gan pie aiz aiz ... aiz nakamās reizes 7. Tāpēc, šajā pirmajā reizē OCR iestādīsim nevis uz 7, bet gan teiksim uz 128 un tad pie pārtraukuma, kas ir pie 128, varam iestādīt 7. Protams, pašam jāpaseko, lai ar šādām lietām nesapītos meistarībā, bet nekāda īpaša čakara neredzu. Savukārt tur, kur Karloss minēja, ka 123 vietā jāuzstāda mazāka vērtība, nepiekrītu. Ja IO pinu maiņai izmantoju tikai output compare pārtraukumu, tam nav nozīmes - aizture no momenta, kad taimeris sasniedz OCR reģistrā esošo vērtību līdz IO pina pārslēgšanai ir nemainīga. Taimera skaitītāju taču es neaiztieku - tas visu laiku netraucēts skrien uz riņķi, darbojos tikai ar otput compare moduli. Ja gribētu pačakarēties, varētu to konstrukciju uztaisīt uz AT90S1200 - dažas tādas man vēl ir saglabājušās, korpuss un pinu izvietojums ir identisks ATTINY2313, bet tur ir 8 bitu taimeris bez output compare moduļa - viss būtu jāorganizē tikai uz pārpildīšanās pārtraukuma. Tur būtu jāmaina taimera taimera skaitītājs un jāierēķina nobīde, kas pie šādas maiņas rodas. Bet atkal - nekā traģiska, tas cik ilgā laikā viss notiek, ir precīzi zināms, atliek tikai to ņemt vērā.
    p.s. Pārskatīju atvilknes. Atradu kvarcu 11.0592MHz. Dalās gan ar 100, gan 135 bez atlikuma.

  6. #16
    Senior Member
    Mar 2011
    703

    karloslv, es varu dot novērtējumu - reiz uz fikso uztaisot taimeri uz 20 minūtēm (ciklējot _delay_ms), rezultāts bija 17 minūtes.

  7. #17
    Senior Member
    Apr 2007
    2,088

    Savukārt tur, kur Karloss minēja, ka 123 vietā jāuzstāda mazāka vērtība, nepiekrītu. Ja IO pinu maiņai izmantoju tikai output compare pārtraukumu, tam nav nozīmes - aizture no momenta, kad taimeris sasniedz OCR reģistrā esošo vērtību līdz IO pina pārslēgšanai ir nemainīga. Taimera skaitītāju taču es neaiztieku - tas visu laiku netraucēts skrien uz riņķi, darbojos tikai ar otput compare moduli.
    Taisnība - dzelziskais taimeris skrien pats savā gaitā, tur nekas nav jākompensē. Bet, tā kā ir pieejams 16 bitu taimeris, tad viss šis ir tikai prāta vingrinājums

  8. #18
    Senior Member
    Dec 2008
    288

    Ko jūs te ņemaities ar visādiem koeficientiem un delayiem....

    Es pārskatīju iedoto shēmu un tur atradu vajadzīgo kvarcu
    Vajag pārlodēt vairs nevajadzīgo 9.504 MHz kvarcu uz ATTINY un 9/10-daļas problēmu atkrīt. Jo, dalot 9504000 ar 100, iznāk cipars bez komata, to pašu dalot ar 135, arī dalījums ir smuks.
    Dažas lietas vēl nemāku, dažas vairs neatceros.....

  9. #19
    Senior Member
    Jun 2006
    Cēsu novads
    990

    Tas verķis ir uzlodēts uzprogrammēts un darbojas. Izskatās šādi:
    TINY.jpg
    Pārāk reti te pievienoju attēlus un tekstus. Nesanāk pievienot asm failu ar programmu un pdf failu ar shēmu. Kad tikšu skaidrībā, būs arī tas.

    Tā, asm failu izdevās ielikt.
    Un pdf failu arī. Tajā pdf failā ir platītes shēma, ja tur virsū ir salikts viss iespējamais. Šajā gadījumā tā nav. Virsū ir ATTINY ar kvarcu un barošanas ķēdēm. No pārējā tur ir C1,C2,C4,C5,VD1,R1,R8,R10,R11,R12,R13,R14 un VT3. Dažu rezistoru nomināli citi: R1=9,1k, R10=30k, R11=120om, R14=1k.

    Kvarca frekvence tāda, ka tur varēja dalīt un dalīt, vienalga sanāk vesels skatlis. Mierīgi varētu iztikt arī ar 8 bitu taimeri, uzlikt preskaleri ar lielu dalījumu, viss notiktu tikpat vienkārši, kā ar 16 bitu taimeri. Bildē redzamajā platītē apakšā var saskatīt kontaktlaukumiņus. Sākot no kreisās puses:
    1. masa
    2. nav izmantots
    3. vadības spriegums frekvences pārslēgšanai
    4. izeja - nosacīti atvērtais kolektors bet ne gluži, jo MCU izejā D3 ieslēgti 5V, tāpēc izejā ir ap 4V meandrs, ja vajag vairāk, jāpieliek izejā rezistors, kas pavelk uz augšu
    5. nav izmantots
    6. barošana

    :
    ;programma 100 un 135 Hz generatoram;kvarcs 11.0592
    
    
    ;lai ieguutu 100Hz jaadala ar 110592
    ;taa kaa jaaformee meandrs, tad fronte buus ik peec 110592/2=55296 sisteemas pulkstena tikskiem
    
    
    ;lai ieguutu 135Hz jaadala ar 81920
    ;taa kaa jaaformee meandrs, tad fronte buus ik peec 81920/2=40960 sisteemas pulkstena tikskiem
    
    
    .include "tn2313def.inc"
        .cseg
    
    
        .org    $0000
    
    
        rjmp    reset
    
    
    .org    INT0addr    ;External Interrupt0
        reti
    .org    INT1addr    ;External Interrupt1
        reti
    .org    ICP1addr    ;Input capture interrupt
        reti
    .org    OC1Aaddr    ;Timer/Counter1 Compare Match A
        rjmp    int_comp
    .org    OVF1addr    ;Overflow1 Interrupt
        reti
    .org    OVF0addr    ;Overflow0 Interrupt
        reti
    .org    URXC0addr    ;USART0 RX Complete Interrupt
        reti
    .org    UDRE0addr    ;USART0 Data Register Empty Interrupt
        reti
    .org    UTXC0addr    ;USART0 TX Complete Interrupt
        reti 
    .org    ACIaddr        ;Analog Comparator Interrupt
        reti 
    .org    PCINTaddr    ;Pin Change Interrupt
        reti
    .org    OC1Baddr    ;Timer/Counter1 Compare Match B
        reti
    .org    OC0Aaddr    ;Timer/Counter0 Compare Match A
        reti     
    .org    OC0Baddr    ;Timer/Counter0 Compare Match B
        reti     
    .org    USI_STARTaddr    ;USI start interrupt
        reti
    .org    USI_OVFaddr    ;USI overflow interrupt
        reti
    .org    ERDYaddr    ;EEPROM write complete
        reti
    .org    WDTaddr        ;Watchdog Timer Interrupt
        reti
    
    
    reset:
    ;inicializacijas proceduuras
    ;uzstaadam steka raadiitaaju uz steka beigaam
        wdr
        cli            ;aizliedzm paartraukumus, taapat vien drosiibai
        clr    r2        ;sis registrs vienmeer nulle, noder
        ldi    r16,$DF
        out    SPL,r16    ;jaunaakaa kaarta
    
    
        ldi    YL,$60
        clr    YH
        ldi    XL,128
    ;notiiram operatiivo atminu
    clr_loop:
        st    Y+,r2
        dec    XL
        brne    clr_loop
    
    
    
    
    ;PORTA ieejas un izejas nedefineejam, taas buus kvarcam un resetam
    
    
    ;nodefineejam PORTB ieejas un izejas
    ;PB7 - netiek izmantota caur pievelkoso rezistoru uz +
    ;PB6 - MISO izeja, izeja prieks ieejas sprieguma daliitaaja, sasleedzu uz masu
    ;PB5 - MOSI ieeja, citaadi neizmantoju, caur pievelkoso rezistoru uz +
    ;PB4 - ieeja, signaala celaa, nedriikst trauceet, taapeec paliek kaa ieeja bez pievelkosaa rezistora
    ;PB3 - izeja, kuraa buus vajadziigaa frekvence
    ;PB2 - izeja, PWM analogaa komparatora referencei
    ;PB1 - analogaa komparatora ieeja, taa, pie kuras pienaak vadiibas signaals
    ;PB0 - analogaa komparatora ieeja, taa, kur references spriegums
    
    
        ldi    r16,0b01101100
        out    DDRB,r16
        ldi    r16,0b10100000
        out    PORTB,r16
    
    
    ;nodefineejam PORTD ieejas un izejas
    ;PD7 - neeksistee
    ;PD6 - netiek izmantota caur pievelkoso rezistoru uz +
    ;PD5 - netiek izmantota caur pievelkoso rezistoru uz +
    ;PD4 - netiek izmantota caur pievelkoso rezistoru uz +
    ;PD3 - izeja, +5V caur diodi un 4.7k uz izejas tranzistora kolektoru
    ;PD2 - netiek izmantota caur pievelkoso rezistoru uz +
    ;PD1 - izeja TXD/ netiek izmantota caur pievelkoso rezistoru uz +
    ;PD0 - ieeja RXD/ netiek izmantota caur pievelkoso rezistoru uz +
    
    
        ldi    r16,0b00101000
        out    DDRD,r16
        ldi    r16,0b01111111
        out    PORTD,r16
    
    
    ;taimera0 A izejas PWM izmantosu analogaa komparatora ieejas references formeesanai
    
    
    ;kvarcs 11.0592
    ;taimera0 ieeja bez daliitaaja, paarpildiisanaas frekvence 43200Hz
    ;taimeri0 izmanto kaa PWM RPM ieejas atbalsta liimena reguleesanai
    
    
    ;7 - 1 Clear OC0A on Compare Match, set OC0A at TOP
    ;6 - 0 Clear OC0A on Compare Match, set OC0A at TOP
    ;5 - 0 Normal port operation, OC0B disconnected
    ;4 - 0 Normal port operation, OC0B disconnected
    ;3 - 0 neizmanto
    ;2 - 0 neizmanto
    ;1 - 1 fast PWM
    ;0 - 1 fast PWM
    
    
        ldi    r16,0b10000011
        out    TCCR0A,r16
    
    
    
    
    ;7 - 0 PWM modee
    ;6 - 0 PWM modee
    ;5 - 0 neizmanto
    ;4 - 0 neizmanto
    ;3 - 0 fast PWM virsotne FF
    ;2 - 0 bez daliitaaja 
    ;1 - 0 bez daliitaaja
    ;0 - 1 bez daliitaaja
    
    
        ldi    r16,0b00000001
        out    TCCR0B,r16
    
    
        ldi    r16,128+16    ;saakotneejais PWM
        out OCR0A,r16
    
    
    ;7 - 0 OC1A atvienots
    ;6 - 0 OC1A atvienots
    ;5 - 0 OC1B atvienots
    ;4 - 0 OC1B atvienots
    ;3 - 0 neizmanto
    ;2 - 0 neizmanto
    ;1 - 0 bez PWM
    ;0 - 0 bez PWM
    
    
        out    TCCR1A,r2
    
    
    ;7 - 0 input capture neizmantoju
    ;6 - 0 input capture neizmantoju
    ;5 - 0 neizmanto
    ;4 - 0 normaala mode
    ;3 - 0 normaala mode
    ;2 - 0  
    ;1 - 0 
    ;0 - 1 bez daliitaaja
    
    
        ldi    r16,0b00000001
        out    TCCR1B,r16
    
    
    ;taimeru paartraukumus pagaidaam neiesleedzu
    
    
    ;7 - 0 komparators iesleegts
    ;6 - 0 bangup reference nav izmantota
    ;5 - 0 tas ir tikai lasaams bits
    ;4 - 1 iterrupta karogs, ierakstam 1, lai nomestu
    ;3 - 0 interrupts nav atlauts
    ;2 - 0 izeja uz ICP netiek izmantota
    ;1 - 0 interrupts uz augoso fronti, bet vispaar neizmantojam
    ;0 - 0 interrupts uz augoso fronti, bet vispaar neizmantojam
    
    
        ldi    r16,0b00010000
        out    ACSR,r16
    
    
    ;sajaa vietaa paartraukumi no taimeriem veel nav atlauti
    ;taimeru vadiisanas registrs
    ;7 - 0 atlauts paartraukums no taimera 1 paarpildiisanaas
    ;6 - 1 atlauts paartraukums no OC1A
    ;5 - 0 nav atlauts OC1B
    ;4 - 0 rezerveets
    ;3 - 0 nav atlauts ICP
    ;2 - 0 nav atlauts paartraukums OC0B
    ;1 - 0 nav atlauts paartraukums no taimera0 paarpildiisanaas 
    ;0 - 0 nav atlauts paartraukums no OC0A
    
    
        ldi    r16,0b01000000
        out    TIMSK,r16
    
    
        in    XL,TCNT1L    ;nolasam taimera 1 staavokli
        in    XH,TCNT1H
    
    
        inc     XH        ;palielinam par 256
    
    
        out    OCR1AH,XH    ;ieliekam output compare registros so momentu, tad buus pirmaa fronte
        out OCR1AL,XL
    
    
        ldi     r17, 0b00001000
    
    
        ldi    r18,low(55296)    ;tas prieks 100Hz
        ldi    r19,high(55296)
    
    
        ldi    r20,low(40960)    ;tas prieks 135Hz
        ldi    r21,high(40960)
        sei        ;atlaujam paartraukumus 
    
    
    ;galvenajaa cilpaa nekas nenotiek
    mainloop:
        wdr
        rjmp    mainloop
    
    
    ;paartraukums OC1A
    int_comp:
        in    r3,SREG
    
    
        in    r16,PORTB    ;ielasam PORTB staavokli
        eor    r16,r17        ;izmainam uz preteejo vajadziigo bitu
        out PORTB,r16    ;un ierakstam atpakal
    
    
        in    XL,OCR1AL
        in    XH,OCR1AH
    
    
        sbis    ACSR,ACO    ;kaadai frekvencei atbilst signaals no analogaa komparatora?
        rjmp    fr1            ;135Hz
    
    
    ;frekvence 100 Hz
    fr0:
        add    XL,r18        ;registros r19:r18 ir laika intervaals liidz naakosajai frontei prieks 100Hz
        adc    XH,r19
    
    
        out    OCR1AH,XH    ;ieliekam output compare registros so momentu, tad buus naakosaa fronte
        out OCR1AL,XL
    
    
        ldi    r16,128+16    ;PWM kas nosaka references spriegumu virs kura paarsleegsies uz 135Hz
        out OCR0A,r16
    
    
        out    SREG,r3
        reti
    
    
    ;frekvence 135Hz
    fr1:
        add    XL,r20        ;registros r21:r20 ir laika intervaals liidz naakosajai frontei prieks 135Hz
        adc    XH,r21
    
    
        out    OCR1AH,XH    ;ieliekam output compare registros momentu, tad buus naakosaa fronte
        out OCR1AL,XL
    
    
        ldi    r16,128-16    ;PWM kas nosaka references spriegumu zem kura paarsleegsies uz 100Hz
        out OCR0A,r16    ;liimeni atskiras, lai buutu histereeze
    
    
        out    SREG,r3
        reti

  10. #20
    Senior Member
    Apr 2007
    2,088

    Smukāk gan būtu galvenajā cilpā iet gulēt

+