# PIC mikrokontrolleri >  PIC16F84A interrupt, FLAGS, multitasking uc lietas iz dzīves

## JDat

Sakarā ar tēmu par interrupt lietošanu uc lietām nolēmu padalīties...

Rekur piemērs iz dzīves ar karogiem un "multitasking":



```
'Kods rakstīts pirms 2 gadiem ar GCBASIC (google rulle), komentāri šodien.
'Kaut ko esmu aizmisris, tāpēc komentāri var būt neprecīzi


'probe1 tas ir sensors kurš dod impulsus, kuri mums jāskaita
'skaitam tikai tad kad pāriet no LOG1 uz LOG0

'pa RS-232 portu sūtam datus uz PC tālākai apstrādei

'Sistēmas ideja:
'Pie kardāna pielkts sensors, kurš skaita autiņa kardāna apgriezienus
'kontrolieris skaita cik impulsu ir bijis un 10 reizes sekundē sūta uz datoru.

'Kāpēc PIC16F84A nevis normāls akmens?
'Tāpēc, ka biju MCU apgūšanas sakuma stadijā
'Tāpēc, ka atri vajadzēja uztaisīt
'Tāpēc, ka tajā laikā safanojos par RTOS uz MCU un lasīju konceptuālas idejas internetā

'===== CHIP SETUP  
#chip 16F84A, 20                'patiesībā 19.6608 MHz nevis 20 MHZ, bet tas lai GCBASIC nepiesienas pie sīkumiem, jo viņa delay loop tik un tā mums nevajag
#config HS_OSC                  'Ātrais kvarcs
#config WDT_OFF                 'nevajag sargsuni
#config PWRTE_ON                'Reset delay pie +5V ieslēgšanas. drošs paliek drošs, jo darbinam tak uz autiņa nevis ideālos apstākļos
#config CP_ON                   'jā, esmu gnīda un man savulaik bija žēl open source taisīt, bet laiki mainās

'===== Define I/O
#define tmr0owflow INTCON.T0IF          'nosaucam MCU Timer Overflew karogu, kā mums ērtāk
#define carry STATUS.C                  'Nosaucam pārnese karogu kā mums ērtāk (neatceros nafig vajadzēja toreiz)

#define rs232 PORTA.3                   'nosaucam attiecīgo protu, lai mums ērtāk. Izmanto prieks RS232 sūtīšanas uz kompi
#define probe1 portb.6                  'nosaucam attiecīgo protu, lai mums ērtāk. Izmanto priekš sensora ieejas

'===== Declare Variables
dim comsend as bit               '
dim comgo as bit                 '
dim outbuff as bit               'Karogs: glabā nākošo vitu kuru timer nosūtīts
dim timercomplete as bit         'timer pabeidza savu darbu un drīkst nosūtīt nākošo bitbang bitu
dim timersend as bit             'timer drīkst sūtīt nākošo bitbang bitu

dim p1 as byte                   'te glabājas impulsu skaits ko sensors noskaitīja
dim curbuff as byte              'pašreiz sūtāmā baita buferis
dim ubuff1 as byte               'starpbuferis kurā ieliek sensora impulsu skaitu priekš sūtīšanas

dim curbit as byte               'pašreizējais bitbang bita numurs
dim nextchar as byte             'nākošais sūtāmais baits
 
dim Countervalue as word         '16 bit mainīgais 100 mS aizturei


Startup:                         'nu ko? Sākam šiverēties?
CounterValue = 0                 'Dieva dēļ neaizmirsti noresetot, jo ne viens cits to tavā vietā nedarīs

'================================================================
'===== SET DIRECTION OF THE PORTS  
'================================================================
dir probe1 in                    'uzstādam attiecīgo portu kā ieeju (itkā ir defaultā, bet labais kodēšanas stils utt)

set comsend off                  'aizliedzam sūtīt pa seriālo porto

Dir rs232 out                    'attiecīgais ports kā izeja
set rs232 off                    'Dieva dēļ neaizmirsti noresetot, jo ne viens cits to tavā vietā nedarīs

'Setup Timer
movlw	b'11001111'		'no prescaler            'timeri darbinam bez prescaler RS-232 ātrums 19200 bit/sec
''movlw	b'11000000'		'prescaler 1/2           'ja nu gribam tomēr 9600 bit/sec
movwf	option_reg                       'aizmirsu kā tur bija ar opciju registru iekš MCU


clrf	trisb                            'Laikam atslēdzam pullup vai tml, neatceros

On Interrupt PORTBChange Call probe      'pasakam GCBASIC, ko darīt ja itek izsaukts B porta izmaiņu partraukums rtfm


'===== MAIN PROGRAM LOOP  
Main:

'izsaucam katru reizi, kad timer pārpildījies
if tmr0owflow on then	            'Izpildam šo thread, ja timer ir pārpildījies
	set tmr0owflow off              'noresetojam timer pārpildi, jo ne viens citr to nedarīs
	countervalue ++                 'skaitam pārpildes lai realižetu 100 ms aisturi paketes sūtīšanai

	'RS-232 stuff
	if timersend on then            'izsaucam ja drīkst sūtīt vajadzīgo bitu, tad sūtam
		set timersend off           'aizliedam sūtīt nākošo bitu, lai sistēma sagatavo un nenosutam otru reizi pie timer overflow
		if outbuff off then set rs232 on      'sūtam pa RS-232 LOG1 vai LOG0
		if outbuff on then set rs232 off      'atkarībā no outbuff karoga stāvokļa
		'rs232=not(outbuff)         'Stulbais GCBASIC gļuko ar šitādu
	end if
	set timercomplete on            'Dodam ziņu ka timer ir pabeidzis savas darbības (pašu definētais FLAG)
end if


'RS-232 stuff
if comsend on then                  'izpildam ja drīkstam sūtīt baitus
if timercomplete on then            'Ja timer ir pabaidzis savas darbības (mūsu FLAG), tad gatavojam nākošo bitbang bitu
	select case curbit              'kurš bits mums jāsūtano pašreizējā bufera? start,0-7 vai stop?
	case 0	'start bit              'outbuff FLAG uzstādās atkarībā no bita kuru mums jāsūta (pašreizējais bita numurs glabājas curbit mainīgajā)
		set outbuff on
	case 1	'bit 0
		if curbuff.0 off then set outbuff off
		if curbuff.0 on then set outbuff on
	case 2	'bit 1
		if curbuff.1 off then set outbuff off
		if curbuff.1 on then set outbuff on
	case 3	'bit 2
		if curbuff.2 off then set outbuff off
		if curbuff.2 on then set outbuff on
	case 4	'bit 3
		if curbuff.3 off then set outbuff off
		if curbuff.3 on then set outbuff on
	case 5	'bit 4
		if curbuff.4 off then set outbuff off
		if curbuff.4 on then set outbuff on
	case 6	'bit 5
		if curbuff.5 off then set outbuff off
		if curbuff.5 on then set outbuff on
	case 7	'bit 6
		if curbuff.6 off then set outbuff off
		if curbuff.6 on then set outbuff on
	case 8	'bit 7
		if curbuff.7 off then set outbuff off
		if curbuff.7 on then set outbuff on
	case 9	'stop bit 1
		set outbuff off
	case 10	'stop bit 2
		set outbuff off
		set comsend off                  'aizliedzam sagatavot nākošo bitu. to atļaus comgo karogs kad būs zināms kuru baitu tagad sūtīt
		curbit=255                       'laikam bija domāts case else izsaukšanai, vai trikam lai nonullētu šo mainīgo, neatceros
		nextchar ++                      'pieskaitam 1, lai comgo thread sagatavo naķošo baitu
		set comgo on                     'pa cik nosūtījām baitu drīkstam sagatavot nākošo baitu
	'case else
	end select
	set timersend on                     'atljaujam timer thread nosūtīt bitu
	curbit ++                            'uzliekam shim thread apstrādei nākošo bitbang bitu, kad nākošreiz izsauks
	set timercomplete off	             'dodam ziņu, ka sapratām timer darbības pabeigšanu un aizliedam gatavot nākoši bitbang bitu prieš RS-232 iekš timer thread
end if
end if

''Izpildam tikai tad, kad drīkst sūtīt paketi
if comgo on then
	select case nextchar         'kas jāsūta pa RS-232 Sākuma baits, dati vai beigu baits?
		case 0
			curbuff=66           'Sūtam zīmi uz PC ka pakete ir sākusies
		case 1
			curbuff=ubuff1       'Sūtam datu skaitli
		case 2
			curbuff=69           'Sūtam zīmi uz PC ka pakete beidzas
		case 3
			nextchar=0           'būs jāsāk gatavot pakete ar prmo zīmi
			set comgo off        'aizliedam gatavot nākoši baitu, jo visu jau sagatavojām un aizsūtijām
			goto endcomGO        'izejam no thread, jo visu jau aistūtijām
	end select
	set comsend on               'atļaujam sūtīt vienu baitu
	set comgo off                'pakete nosūtīta, aizliedam nākošās paketes sūtīšanu (atļaus cits IF ik pēc 100 ms)
end if
endComGo:

'čekojam vai ir pagājušas 100 milisekundes (sūtam paketi 10 rezies sekundē)
'pa cik timer pārpildās 19200 reizes sekundē, skaitam 1920 pārpildes stap pakešu sūtīšanu
if countervalue>1920 then		'no prescaler
''if countervalue>960 then		'prescaler 1/2 9600 100 ms
	countervalue=0              'noresetojam skaitītāju, jo neviens cits to mūsu vietā neizdarīs

	ubuff1=p1                   'ielādējam impulsubuferī skaito no proves skaitītāja
	p1=ubuff1-p1                'gadījumā ja pa vidu bija interrupts vai kāda cita lieta, mēs nedrīkstam reseto p1 skaitītāju, bet gan tikai atņemt no
								'tā mūsu bufera datus
	set comgo on				'pa cik pagāja 100 ms, atļaujam sūtīt paketi
end if
	
Goto Main                       'uz cikla sākumu

'================================================================
'===== SUBROUTINES AND FUNCTIONS  
'================================================================
Sub probe                         'interrupt, kurā skaitam impulsus
	if probe1 off then p1 ++      'ja ir LOG0 uz sensora ieejas (tad pieskaitam), jo mums jāskaita tikai tad, kad signāls pāriet no LOG1 uz LOG0
end sub
```

 Ja ko nesapratāt tad diskutējam...

Vabūt ka kaut kas nestrādā, jo ir n-tās reizes pārrakstīts un nav testēts. Kaut kāda versija no tā visa strādāja reālā rallijā.
Bija ģluki mazi ar RS-232, jitter iezagās, bet pēc tā kods tika modificēts, bet testēts gan vairs netika. 

PS: Braucēji nefinišēja, jo sabojājās skaitīšanas sistēmas sensors (sensors nobira gonkas vidū) . Tas nebija manā kompetencē, jo pirms gonkas vajadzēja pārbaudīt sensora fisisko veselības stāvokli. Pēdēja sensora pārbaude bija 2 mēneši pirms gonkas. Tas bija mehāniķu komopetencē, jo šie muntēja sensoru uz kar'dana. Es tikai ar smalko elektroniku un kodēšanu nodarbojos.  ::

----------


## habitbraker

Ar tādu jau var pat piķi pelnīt  :: 
Tā var jaukt ASM un BASIC kodus kopā? Laikam briesmīgi neiedziļināšos, tagad man topā ASM  :: 
kapēc



> clrf   trisb                            'Laikam atslēdzam pullup vai tml, neatceros


 Cik saprotu tas ir vienkāŗši resetot trisb reģistru, bet pirms tam jau nebija nekas uzstādīts

----------


## JDat

par piķa pelnīšanu nezinu. Man patīk ideja kas ielikta šajā kodā. Sim var pa tiešo jaukt asm un basic. Šis arī tavā vietā automātiski seko līdzi bankām. Sīkums bet patīkami. Dažas iebūvētās funkcijas (inittimer piemēram) ir sūdīgas. Tad es pats pierakstu klāt savu asm kodu. Pēc tāda basic lietošanas vienmēr izanalizē asm kodu. Daudz bīnumu tur parādās. Tāpēc ir vietas ko ar roku jāpielabo un uz simulatora jādzenā. Dzelžu līmeni slēdzu PIC izejas kāju pa tiešo pie RS-232 rxd pina. Kodā ieliekot0pareizu polaritāti viss strādā bez papildus komponentiem. Par trisb reset neatceros. Jāizlasa datu lapa, tad zināšu kāpēc tur ir tā komanda.

----------


## marizo

TRISB ir reģistrs, kurā norāda PORTB būs ieejas vai izejas.
Sākumā visas ir nodefinētas kā ieejas, ar clrf padara tās par izejām.
Tā kā 

```
clrf   trisb
```

  tiek izpildīts pēc 

```
dir probe1 in
```

  rodas aizdomas, ka sensora nolasīšana nemaz nenotiek.

----------


## JDat

ehh. Pielīdīšu pie datora un pārbaudīšu. Varbūt tur bija jāb
ūt aizkomentētam.

----------


## marizo

Tā kā pārtraukumu izsauc PORTBChange, nevar atstāt neizmantotās PORTB par ieejām. Vai arī tās "jāatsien" pret zemi vai +5V, lai neizsauktu viltus pārtraukumus.

----------


## JDat

žel ka pats ndpiemineju. Neizmantotās bij pret zemi. To slimibu jau izslimoju.  ::  PortB0 vareju lietot. Būtu labāk, bet ak vai. Pāris peizes ieliekot otrādi programmatorā, nosvilināju. Tāpēc arī lietoju RB5. Bez tam pcb tik maza ka bija vieglāk aizvilkt uz 5. Pinu. Par RS-232. Man darbojās pa tiešo no MCU uz datoru, bet drošībai biju palaidis caur optronu.

----------


## habitbraker

Nu ja tema par pic16f84a interuptiem utt

Šodien visu dienu rakstiju kodu sim mcu. Mans pirmais nopietnais kods ASM.Kompilējas, bet simulējot kautkas nestrādā
Programmas darbība: ir RB0 interupts, RA4 taimeris ar ārējo clocku. Abi pini savienoti un abos reizē ielaiž impulsus ar kādu notiektu frekvenci. Nostrādā interupts, un sāk pildīties interrupt rutīna. Tajā resetojas tmr0-tas sāk skaitīties no "0''. Tad pēc 1 s aiztures tiek nolasīta tmr0 vērtība un saglabāta atmiņā (sample). Apmēram vajadzētu būt tā - tik cik sample vērtība tāda impulsu frekvence. Tad Sample saturs tiek aizsūtīts uz portb. 


```
list p=16F84A
#include p16f84a.inc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
tmr0         equ 01h                  ;pieskir adresem vardus
status      equ 03h
porta        equ 05h
portb        equ 06h
trisa         equ 85h
trisb         equ 86h
optionreg equ 81h
intcon       equ 0bh
sample         equ 0dh ; 13. adrese

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 00h                           ;programma sakas ar 0to adresi/reset vektors
goto main                      ; parlekt interupt vektoram (adresei 04h)
org 04h                            ;interupt vektors
goto interupt

;=======main============;
org 0fh ;15. adrese
main    
bsf status,5   ;uz bank1
movlw b'00010000' ;RA4 ieeja, parejaas izejas
movwf trisa
movlw b'00000001' ; RB7 ieeja, parejas izejas
movwf trisb 
movlw b'00101000' ;T0CK1 counter, no prescaler
movwf optionreg  
bcf status,5   ;atpakal uz bank0
movlw b'10010000' ; portb izmaiņas interupts      
movwf intcon
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
loop 
movf sample,0
movwf portb  ;sample saturs un portb
goto loop

;==========interupt===========;
interupt 
clrf tmr0 ;resetot tmr0 registru
;;;;;;;;;delay 1s;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ģenerēts http://www.piclist.com/techref/picli...egen/delay.htm
cblock  ; bloks ar atminas adresem 
	d1
	d2
	d3
endc
			;999997 cycles
	movlw	0x08
	movwf	d1
	movlw	0x2F
	movwf	d2
	movlw	0x03
	movwf	d3
Delay_0
	decfsz	d1, f
	goto	$+2
	decfsz	d2, f
	goto	$+2
	decfsz	d3, f
	goto	Delay_0

			;3 cycles
	goto	$+1
	nop
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movf tmr0,0 ; pec 1s panemta tmr0 vertiba, ieraktita W, tad sample 
movwf sample
bcf intcon,1 ;reseto interupt karogu
retfie ; iziet no interupt ruttiinas

end
```

 Protams nekas nestrādā arī  laižot tos impulsus ilgāk par 1 s RA4. Kautkā liekas, ka kautko daru nepareizi... Varbūt redzat kādu kļūdu? Kautkas varbūt nav kār'ibā ar tām org adresēm?

----------


## JDat

kā vienmēr: pastāsti par agregātu, ko būvē. Varbūt koncepcija jau saknē jāmaina.

----------


## habitbraker

Nu tas bija domāts IR dekoderis. Pašu nesējfrekvenci dekodēs cita mikrene.
 Piemēram iedodot PICam 100hz(+/-5hz)signālu, attiecīgā izejā "1". Iedodot 120 hz, attiecīgi citā. Nu saprati ideju.   ::  
Tik tālu gan kodā netiku. Pa priekšu jadabū, lai frekfenci atpazīst un tam iepostotajam kodam to jāvar itkā.

----------


## JDat

Globāli ņemot: kāpēc negribi gatavu RC5 izmantot? Nebūs ir pults jābūvē. Dekodēšanai arī kodi ir gatavi. Pielāgo un lieto. Ja nu tomēr gribi savu... No sākuma: cik komandas gribi sūtīt uz savu pastūzi? Tad izdomā protokolu. Tad arī zinās kā kodēt. Ja atrisināt šo jautājumu, tad: cik ilgi tev tie 100 hz iet uz tmr kāju? 1 sec, 0.1 sec? Timer pārpildas 1000 reizes sekundē. Tajā brīdī nolasi no in kajas stāvokli. Ja 0, nedari ne ko. Ja 1, tad skaiti cik reizes tmr overflow irq izsaukts. Ja atkal konstatē 0 tad izvadi saskaitīto uz portB. Tāda koncepcija algoritmam. Atliek uzrakstīt kodu.

----------


## habitbraker

Nu gribās savu protokolu tomēr. Kādas 4 komandas būtu pietiekamas, piemēram 100, 120, 140 un 160Hz. 
Nu kautvai 1s varu turēt pults pogu nospiestu, tāka 1s ir pienemams laiks cik ilgi mērīt frekvenci
Īsti neibraucu tavā versijā. 
Tas timer 1000 reižu sek pārpildās no PIC clocka vai no ārējiem impulsiem?
Kurā brīdī nolasīt to stāvokli(timer vai owerflow karoga?)? Kā es varu tādā veidā atsķirt tās frekvences un vai nesanāk, ka pogai jābūt nospiestai noteiktu laika periodu?   ::

----------


## JDat

tmr no pic clk. Sūti pa pakām ik pa 0.1 sekundei pa 10 impulsiem. Izvēlies tareizu tmr ovfl laiku, lai ar garantiju var atšķirt freq.

----------


## next

Kaadreiz taisiiju dimmeri ar vadiibu no IR pults.
Kaareiz tur multitaaskings nodereeja.
Pic12f629 darbojaas no INTRC un TMR0 deva paartraukumus ar frekvenci apmeeram 4 KHz.
Pashaa paartraukumaa tikai:


```
	ORG	4		;interrupts
	btfss	INTCON,T0IF
	goto	skip		;paartraukums nav no tmr0
	bcf	INTCON,T0IF
	bsf	tm0flag
	retfie
```

 Viss paareejais fonaa jo paraleeli darbojas veel divi paartraukumi - INT (tiikla sprieguma jauna perioda saakums) un TMR1 (formee aiztures laiku liidz tiristora atveershanas impulsam).
To kodu  posteet nav veerts, tik un taa neviens neko nesapratiis.
Vaardos aprakstot:
Fona uzdevums nolasa atbilstosho ieeju, saliidzina ar ieprieksheejo staavokli, ja nav mainiijies tad inkrementee skaitiitaaju kas meera impulsu un pauzhu garumus.
Ja izmainja ir tad saglabaa informaaciju un uzsaak jaunaa staavoklja ilguma meeriishanu.
Ja pina liimenis ilgstoshi nemainiigs tad tas noziimee ka IR pakete beigusies un jaasaak apstraade un saliidzinaashana ar sagaidaamo signaalu paraugiem.
Visa programma veidota kaa klasiska "finite-state machine".

----------


## habitbraker

Paldies par algoritmiem Jdat, next. Laikam tomēr man ir cits domu gājiens  :: 
Bet jāmēģina pašam izštukot.
KO sakāt par šadu?

TMR0 skaitās no galvenā clocka, piemēram, 1000hz
Ja iedod int ieejā 100hz piemēram(interupts uz rising edge), int rutīnā TMR0 nullējas un skaitās tālāk no nulles.  uzstādās flags, iziet no int rutīnas.
Kad int ieejā parādās nakamais 100hz rising edge, atkal interupts, pārbauda flagu - tātad japaņem tmr0 vertību un jāieraksta atmiņā.
Tādā veidā sanāk, ka atmiņā ir skaitlis kas parāda cik 100hz periodā ietilpa 1000hz periodi. Šajā gadījumā tas skaitlis būtu 10 apmēram. (0,01s/0,001s)
Pēc tā skaitļa arī varētu atsšķirt frekv.
Ko sakāt? Ir sakars kodēt tādu?  ::

----------


## next

Pirmkaart vajag paarliecinaaties vai tavs IR uztveereejs taadas frekvences njem pretii.
Jo pamataa IR pultiim modulaacijas frekvences ir ap 1KHz un uztveereeju kontrukcijas var buut orienteetas uz taam.
Katraa zinjaa kautkur forumos esmu lasiijis ka ljautinji uz shito lietu iekritushi.

----------


## habitbraker

Nē ne tādā ziņā ir kartibā.
IR man uztver mikrene kas nomodulē 36khz nesējfrekvenci tā, ka tai izejā ir zema frekvence, piemēram, 100hz. 
http://www.argus.lv/pub/datasheets/tsop48xx.pdf

Hmm skatos uz savu iepriekšējo kodu un nevaru saprast kas par vainu.
JAUTĀJUMS. 
vai es varu sūtīt uz portb piemēram 10001110, ja man viens no piniem ir uzstādīts kā ieeja? Vins attēlos tos bitus kuri aizsūtīti uz izejām vai vispār neko neattēlos?

Var, tikko pārbaudīju, hmm interupts strādā arī pārbaudīju, vaina kautkur citur

----------


## marizo

Nu paga.. Vai Tev derēs, ja saskaitīsi cik krītošās (vai augošās) frontes ir ieejas signālam vienā sekundē?
Palasi par Manchester kodēšanu, tāda ir IR RC5 pultīs.
Es arī esmu tāds lielā mērā teorētiķis-muldētājs, bet ar IR signāla uztveršanu tiku galā.
Princips tāds - pie pirmās signāla izmaiņas no "1" uz "0" (no TSOP48XX nāk ārā inversi) sākas pārtraukums. Tad ik pēc laika (vai nu vnk ar delay vai uz TMR INT) lasām signālu. Viss atkarīgs no tā, kas programmai vēl jādara. No tā arī atkarīgs, kā tieši tiek realizēta nolasīšana, laika aiztures. 
Viens uztvertais bits sastāv no 1-0 vai 0-1 daļām, tur var realizēt arī vienkāršu uztvertā signāla pareizības pārbaudi.

Pētīju to kodu, kaut ko nesaprotu tur.
atver to p16f84a.inc failu, tur jau ir definēti, atkritīs 

```
tmr0         equ 01h                  ;pieskir adresem vardus
status      equ 03h
porta        equ 05h
portb        equ 06h
trisa         equ 85h
trisb         equ 86h
optionreg equ 81h
intcon       equ 0bh
```

 Ko dod tas 

```
org 0fh ;15. adrese
```

 Vai ierakstīšana PORTB jau neizsauc pārtraukumu?

----------


## JDat

novirsīšos no tēmas, bet negribi izmantot PT2262 un PT2272 mikrenes? Veikalos nedabūsi, bet man ir dažas krājumos. Vēl var āri nopirkt eBay. IR pultī uzliec 555 timer uz vajadzīgajiem 36 vai tml KHz modulācijai. Uztvērēju stiķē klāt pie mikrenes un viss gatavs. Ne kas nav jākodē un var nosūtīt vismaz 4 komandas.

----------


## next

<skip>
Muljkjiibu uzrakstiiju un nodzeesu.

----------


## habitbraker

Paldies par atbildēm. 
To kodu itkā salaboju un nosacīti strādā. Lieta tāda, ka tagad atklājas problēmas. Ja interuptu liek kā atsevišķu pogu un laiž iekšā frekvenci tmr0, piespiežot interupt pogu, tiek saskaitīti impulsi, kas noskaitās sekundes laikā un rezultāts izvadās uz portb. Un rezultāts nemainās nemainot frekvenci. Savā ziņā kautkas līdzīgs frekvences skaitītājam sanāca  :: . Tagad jaizdomā, kā, lai to pielāgo manai vajadzībai. Katrā ziņās uz labo pusi  :: 


```
org 00h                           ;programma sakas ar 0to adresi
goto main                      ; parlekt interupt vektoram (adresei 04h)
org 04h                            ;interupt vektors
goto interupt

;=======main============;
main    
bsf status,5   ;uz bank1
movlw b'00010000' ;00010000 RA4 ieeja, parejaas izejas
movwf trisa
movlw b'00000001' ; RB7 ieeja, parejas izejas
movwf trisb 
movlw b'01101000' ;RA4 counter, no prescaler
movwf optionreg  
bcf status,5   ;atpakal uz bank0
movlw b'10010000' ; portb izmaiņas interupts      
movwf intcon
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
loop

movf sample,0
movwf portb

goto loop

;==========interupt===========;
interupt 
clrf tmr0 ;resetot tmr0 registru
;;;;;;;;;delay 1s;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	cblock 28h
	d1
	d2
	d3
	endc
	movlw	0x08
	movwf	d1
	movlw	0x2F
	movwf	d2
	movlw	0x03
	movwf	d3
Delay_0
	decfsz	d1, f
	goto	$+2
	decfsz	d2, f
	goto	$+2
	decfsz	d3, f
	goto	Delay_0
	goto	$+1
	nop
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movf tmr0,0 ; pec 1s panemta tmr0 vertiba, ieraktita W, tad sample 
movwf sample
bcf intcon,1
retfie ; iziet no interupt ruttiinas

end
```

 Paldies par tām piezīmēm marizo - taisnība tie nav nepieciešami. Par to kādu frekvenci dzīvē izmantošu un cik lielas aiztures būs, domāšu, kad kods principā strādās.
Jdat nu nezinu. Man jau tasTsop uztvērējs ir nopirkts un gribās, arī kautko pašam uztaisīt. Un jā IR pulti taisīšu no 555 - būs 4 zemas f taimeri (katrai pogai savs) un viens 36khz modulators.

----------


## habitbraker

Pārbaudīju tikko uz portB izvadīto binaro - tiešām precīzi sakrīt ar frekvenci.  ::

----------


## JDat

Offtopic: Poor man debug, jeb kļūdu meklēšana reālā dzelzī neizmantojot speciālus rīkus. Uztaisu visu lai strādā ļoti lēni un var vizuļi ar aci kotrolēt. Piekarinu kur vajag pogas un LEDus. Ar aci skatos kas notiek un mēģinu saprast kas nav labi. Tad analizēju kodu un atkal dzenāju uz simulatora. Sarežģīti, bet darbojas.  :: 

Nepētīju ne savus ne habitbraker kodus jo lasu interesantus memuārus ar cerību kaut ko nošpikot savām vajadzībām: http://militera.lib.ru/explo/chertok_be/index.html
par līdzīgu tēmu arī te: http://history.nasa.gov/computers/Compspace.html

gribās pataustīt dzīvē kaut ko no šitādiem zvēriem: http://www.computer-museum.ru/histussr/13-3.htm

 ::

----------


## next

> gribās pataustīt dzīvē kaut ko no šitādiem zvēriem: http://www.computer-museum.ru/histussr/13-3.htm


 Interesanti, vai kaut reizi ekspluataacijas laikaa tas mazhoritaarais mehaanisms ir bijis vajadziigs?

----------


## marizo

Jā, tas sanāk frekvences skaitītājs. Tā kā Tev ir tikai 7biti izejā (RB0, kas kļūdaini komentāros nodēvēts par RB7, ir ieeja), tad nomērīt vari līdz 2^7=128Hz, lai TMR0 rezultātu varētu izvadīt pa atlikušajiem PORTB piniem. Turklāt sample būtu jāpabīda pa kreisi par vienu vietu, lai korekti izvadītu uz PORTB[7:1]. Vai jālieto prescaler vai skaitīšanas laiks mazāks par 1 s.
Liekas, ka 1s pults lasīšanai ir par daudz. Tur var kaut kas traucēt uztveršanā, netikt poga nospiesta un turēta tik ilgi utt, tā ka var rasties kļūda uztveršanā.

Bet principā - Tev tagad vajag raidīt 36kHz nesējfrekvenci, uz kuras modulē 4 (vai cik nu gribas) dažādas frekvences līdz 128 Hz, un caur TSOP to padot PICam.

Ja pieņem, ka pie nospiestas pogas tiks raidīts visu laiku bez pārtraukuma (ar 555 tmr), tad nevajadzētu rasties problēmai, ja IR signāls tiek uztverts ne no paša sākuma, bet vidus, jo saskaitītā frekvence ta nemainīsies.
Protams, saskaitītā f būs atkarīga no 555tmr un PICa clock frekvences stabilitātes.

----------


## JDat

> gribās pataustīt dzīvē kaut ko no šitādiem zvēriem: http://www.computer-museum.ru/histussr/13-3.htm
> 
> 
> 
> 
>  Interesanti, vai kaut reizi ekspluataacijas laikaa tas mazhoritaarais mehaanisms ir bijis vajadziigs?


 Ir ir. Kā reiz lasu memuāros šobrīd. Sākotnēji bija domāts lai paceltu padomju kosmonautu no mēness. Bet reāli izmantoja (jaunākas modifikācijas) tikai Saļut un MIR kosmosa stacijās. Itkā ari Sojuz kosmos kuģos. Līdz tam viss bija analogs un labākajā gadījuma uz primitīvas cietās loģikas. Daži analogie "foruma opīši" var teikt: "Ko jūs te ar saviem kontrolierim lienat visos caurumos. Analogs ir analogs un strādā. Paskatieties komunistu raķetes lido bez datoriem vai kotrolieriem"

Gribētu nedaudz oponēt tādiem apgalvojumiem: Protams tā bija. Raķetes lidoja bez MCU/kompīšiem, bet..  Saskaņā ar memuāriem tam bija savi iemesli un mīnusi. Pirmkārt komunusti stipri atpalika skaitļošanā no kapitālistiem. Vienkārši nepētīja tik intensīvi to jautājumu. Ta ka nācās rēķināt kodolraķetēm un oksmosa kuģiem trajektorijas, tad gan parādījās pirmā skaitļošana 3 stavu ēkas izmērā...

Paši padomju raķēšzinātnieki atzina, ka viens (ne tas svarīgākais, bet tomēr...) no iemesliem kāpēc amīsī apdzina mēness lietās bija skaitļotāja trūkums uz borta. Respektīvi: var uztaisīt nedatorizētu vadības sistēmu, bet tā ir smagāka, sarežģītāka un nedrošāka. Attiecīgi palielinās kompleksa svars un vajag spēcīgākas nesējraķetes lai sasniegtu to pašu. Tai skaitā (gan komunistu, gan kapitālistu) automātiskais zvaigžņu kompass.Komunisti tādu lika uz ballistiskajām raķetēm un lidmašīnām (testēja precizitāti uz lidmašīnas maršrutā Maskava-Daugavpils starp citu), amīši uz B-52 tādu turēja. Pēc būtības tas bija analogs kompūters. Strādāt ta strādāja (pat nedaudz labāk par pieredzējušu stūrmani), bet nu čakars tādu uzturēt kārtībā un regulēt bija nežēlīgs. Romantika tā teikt...  ::  

Morāle: ne vienmēr vajag iztikt bez MCU, vai jābāž MCU visos aparātos. Vienmēr jāizmanto racionālākais risinājums.

----------


## JDat

marizo taisnība par skaitīšanu. Skati 0,1 sekundi ilgi. Rezultātā būs tev 10-20 impulsi. Lai dabūtu precizitāti un kompaktumu taisi arī IR raidošo daļu uz PIC ar ķeramikas rezonatoru vai tml. Samazinās komponentu un enerģijas patēriņš. Ne vienam nepatīk, kad pultij nomirst baterijas.  ::  99,95 % no visa laika IR pults MCU guļ. Tātad jāpaspēlējas ar SLEEP un jādizainē shēma tā, lai nekas lieki nerij enerģiju. Te tad ir tā retā reize par kuru EPIS cepās attiecībā uz enerģijas taupīšanu.  ::

----------


## habitbraker

Taisnība marizo . Tie komentāri ir no vecās versijas, kad interupts bija uz PORTb izmaiņu nevis RB0/int

Viss jau būtu labi bet, piemēram, ja es ņemu skaitītāja samplu piemēram pēc 1s tad notiek tādas lietas (tas pats arī 0,1s tikai sliktāk) - pieņemam es nospiežu pults pogu un turu 1,5s(100hz impulsi 1,5 sekundes, 100 impulsi sekundē) ) . Interupts nostrādā uz pirmo impulsu, INT karogs paceļas, izskaitas impulsi 0,1s(vienalga) laikā, saglabājas rezultāts, resetojas int karogs (atkal iespējams interupts), iziet no interupta, Tas viss notika apmēram 1s laikā (kādas 10us nenemu vērā). Bet tagad viss turpinās, jo rit atlikusī pus sekunde - atkal nostrādā interupts bet šoreiz tmr saskaitīs tikai 50 impulsus (pussekunde) un tas arī būs galarezultāts. 
Kā šādu problēmu varētu atrisināt?   ::

----------


## JDat

Pēc veiksmīgu impulsu saskaitīšanas uzliec karogu Komanda saņemta. Tas nozīmēs neatļaut sistēmai ne ko skaitīt un gaidīt kad ieejā pazudīs jebkādi impulsi. Tiklīdz impulsi ieejā pazuduši (kaut kāds delay vai tml timeout), tad nomest karogu Komanda saņemta un sagatavoties nākošās komandas saņemšanai. Tāda ir fiksā ideja lai atrisinātu tavu problēmu.

----------


## habitbraker

Vo paldies Jdat! -tā uztaisīju un tagad turu pogu kautvai 5,45 sekundes un nekādi feik signāli.  Uzliku arī, lai nem tmr0 sampli pēc 0,1s nevis 1s. Reaģē momentā! Protams nav vairs freqcounter efekta, bet uz portb pie noteiktas frekvences noteikti pini iedegas - to arī man vajag. 
Izmaiņas:


```
list p=16F84A
#include p16f84a.inc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

sample         equ 1eh ;30
flag               equ 1fh  ;31
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 00h                           ;programma sakas ar 0to adresi
goto main                      ; parlekt interupt vektoram (adresei 04h)
org 04h                            ;interupt vektors
goto interupt

;=======main============;
main    
bsf status,5   ;uz bank1
movlw b'00010000' ;00010000 RA4 ieeja, parejaas izejas
movwf trisa
movlw b'00000001' ; RB0 ieeja, parejas izejas
movwf trisb 
movlw b'01101000' ;RA4 counter, no prescaler, INT uz rising edge
movwf optionreg  
bcf status,5   ;atpakal uz bank0
movlw b'10010000' ; INT  interupts      
movwf intcon
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
loop

movf sample,0
movwf portb
;;;;;;;;;;;delay 1s;;;;;;;;;;;;;;;
	cblock 20h
	r1
	r2
	r3
	endc
	movlw	0x08
	movwf	r1
	movlw	0x2F
	movwf	r2
	movlw	0x03
	movwf	r3
Delay_1
	decfsz	r1, f
	goto	$+2
	decfsz	r2, f
	goto	$+2
	decfsz	r3, f
	goto	Delay_1
	goto	$+1
	nop
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
bcf flag,0 ; resetot flagu - nu interuptaa atkal drikst panemt sampli
goto loop

;==========interupt===========;
interupt 
btfsc flag,0 ; ja flag 0tais bits '1', iziet no interupt, ja '0', turpinaat
goto endint
clrf tmr0 ;resetot tmr0 registru
;;;;;;;;;;;;;;;;;;;; delay 100 ms ;;;;;;;;;;;;;;;;;;;;;;;;;;
        cblock 28h
	p1
	p2
	endc
	movlw	0x1F
	movwf	p1
	movlw	0x4F
	movwf	p2
Delay_0
	decfsz	p1, f
	goto	$+2
	decfsz	p2, f
	goto	Delay_0
	goto	$+1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movf tmr0,0 ; pec 1s panemta tmr0 vertiba, ieraktita W, tad panemts sample 
movwf sample
bsf flag,0 ; uzstadit karogu, ka nedrikst panemt sampli
endint bcf intcon,1
retfie ; iziet no interupt ruttiinas

end
```

 Tagad jauzkodē, lai piespiežot pults pogu iedegas tikai viens attiecīgs pins, kā arī otreiz piespiežot to pašu pogu, pins resetojas. Kautkas veidojas ! ::

----------


## marizo

Tad jau labi, ka kaut kas izdodas!

Pāris idejas:
if-then-else


```
;movlw	1					; pārbaudāmais testam
	movwf	W_temp			; Pārbaudāmo ieraksta pagaidu reģ.
	movlw	1			; Kādu vērtību gaidām?
	subwf	W_temp,w
	btfsc	STATUS,Z		; Vai ir?
	goto	$+2
	goto	Main			; nē
```

 vai:



```
	movlw	d'60'		;ko gaidām
	xorwf	W_temp,W		; kas ir?
	btfsc	STATUS,Z
	goto	$+2			; jā
	goto	END			; nē
```

 un Flip-flop jeb latviski trigers:


```
	btfss 	LED1
	goto 	$+3
	bcf		LED1
	goto 	$+2
	bsf		LED1
```

 Iepriekš 

```
#define LED1	PORTB,7
```

 un nolasa pa tiešo porta stāvokli.

----------


## habitbraker

Paldies. tas trigeris tieši noderētu. jautājums - Ko nozīmē tas $ simbols? Tajos ģeneretajos delay ko es izmantoju arī tādi simboli ir.

----------


## JDat

goto $+2 nozīmē iet uz adresi kas ir 2 komandas aiz esošās adrese. Cilvēku valodā: pārlekt par 2 komandām uz priekšu. Es tādu lietu neizmantoju, bet laika jāiemācās, jo izskatās ka dzīvē var noderēt. Tā pat kā adrešu modificējošais reģistrs FSR vai kā tur viņu sauca.

Marizo kodi izskatās vienkārši un smuki. Vajadzēs nošpikot un pamēģināt.

----------


## marizo

goto   $+2 nozīmē doties 2 komandas uz priekšu. Var arī ar -, kas būtu uz atpakaļ. Īsāk, jo nav jāliek label kaut kur.
Šādas komandas liekot gan ir jāuzmanās, jo starpā mainot kodu (iespraužot vai dzēšot kādu komandu) var aizsūtīt uz nepareizo vietu.

Nav jau nekādas gudrības, bet asm tie if-then ir tādi mistiski ar btfss/btfsc.  ::

----------


## habitbraker

skaidrs par $
Bet par šo 

 btfss    LED1 kā tas nāk, ka nav norādīts bits ko pārbaudīt?
   goto    $+3
   bcf      LED1 te arī nav norādīts bits
   goto    $+2
   bsf      LED1 te ar

----------


## JDat

> skaidrs par $
> Bet par šo 
> 
>  btfss    LED1 kā tas nāk, ka nav norādīts bits ko pārbaudīt?
>    goto    $+3
>    bcf      LED1 te arī nav norādīts bits
>    goto    $+2
>    bsf      LED1 te ar


 sakumā (laikam) varēja rakstīt definīciju tavam bitam:


```
#define LED1 PortB.5
```

 Ja tāds eksistē assemblerī (neatceros, bet GCBASIC toš bija), tad kompilējot (pārvēršot tavu ASM kodu par .hex failu) sistēma (kompilatora prepocessor, ja runājam precīzi) pati aizvieto LED1 tekstu ar PortB.5 un tev par to nav jāraizējas. Tāda ideja, nianses sintaksē pielabos speciālisti.  ::  Un vēl: iebūvētais help ir noderīga lieta. Saņemies un izlasi vismaz 90 % no iebūvētā help, dzīvē noderēs uztaisīt ērtus, lasāmus un elastīgus kodus kontrolierim.  ::

----------


## marizo

Palaboju to postu, kur ieliku tos kodu gabaliņus. Kā JDat teica, iepriekš definējam.
Manuprāt, ir ērti sākumā definēt PORT,BIT. Ja laika gaitā nākas mainīt, piemēram, LED1 pieslēguma kāju, tad nav viss kods jāpāršķirsta.

Vispār es te tajos kodos skatos, ka Tev ir status,5. Bet MPLAB man lamājas, jo inc failā ir STATUS,5. Lielie un mazie nav viens un tas pats.

----------


## JDat

neaimirsti par:


```
#include <pic16f84a.inc>
```

 gribās pat teikt ka tas vajadzīgs obligātā kārtā.

----------


## marizo

Jā, pēdējā ieliktajā programmā tas #include <pic16f84a.inc> ir. Bet es par to arī saku, ka tur ir STATUS, TRISA, PORTA utt. ar lielajiem burtiem, bet programmā ar mazajiem, kas nav viens un tas pats.

Vēl ir variants


```
#DEFINE OUT1_M	0x01
#DEFINE OUT2_M	0x02
#DEFINE OUT3_M	0x04


DO_CH1: MOVLW	OUT1_M
	GOTO	CHANGE
	;
DO_CH2:	MOVLW	OUT2_M
	GOTO	CHANGE
	;
DO_CH3:	MOVLW	OUT3_M
CHANGE:	XORWF	GPIO,F	
	GOTO	MAIN
```

 (GPIO=PORTX uz PIC12F629)

----------


## JDat

include, tā pat kā aizrādījums par LIELAJIEM un mazajiem burtiem jāadrēsē habitbraker.  ::

----------


## habitbraker

NU paldies šitais noderēs. Tagad tas T-trigeris kautkā jāintegrē kodā.
Jā to es arī ievēroju, ka inc failā ar lielajiem burtiem. Es izlaboju p16f84a.inc failu tā kā man patīk (ar mazajiem burtiem) un tagad rakstu visu ar mazajiem

----------


## marizo

habitbraker, +1 Tev. Niks saskan ar rīcību. Tikai tagad manus kodus Tev nenokompilēt!  ::

----------


## JDat

ehh. Ko darīsi kad uzliksi jaunāku versiju un kompilēsi savu vai svešu kodu? Nav vieglāk uzlikt ķeksīti opcijās lai ignorē burtu lielumu?

----------


## JDat

nu ja galīgi negribās tad: 

```
#define mansstatus STATUS
```

----------


## next

> NU paldies šitais noderēs. Tagad tas T-trigeris kautkā jāintegrē kodā.
> Jā to es arī ievēroju, ka inc failā ar lielajiem burtiem. Es izlaboju p16f84a.inc failu tā kā man patīk (ar mazajiem burtiem) un tagad rakstu visu ar mazajiem


 Un kur kaifs?
Ja sisteemas dotie apziimeejumi ar lieliem un pasha defineetie ar maziem burtiem tad tak vieglaak atshkjirt vienus no otriem.

PS. Taapat nesaprotu mazohismu ar $+, tas domaats lai aatraak saputrotos un auzaas aizbrauktu?

----------


## JDat

$+ tiem kurus kaitina label lietošana. Domāju ka ir situācijas, kur noder arī tāda metode.

----------


## marizo

Next, mums jau reiz senos laikos nebija domu apmaiņa par $+?  ::  Atceros, ka kāds mani mēģināja atrunāt no šādu goto lietošanas. 
Manuprāt, tas tikai gaumes jautājums. Reizēm ērtāk šādi, reizēm ar iezīmēm.
Kāpēc man lauzīt galvu un domāt label, ja vajag pārlekt 1..2..3 komantām.

----------


## habitbraker

AAA bišk aizrāvos! 
Viss šitais pēc manām domām ir gatavs IR uztvērējs 
Ko es izdarīju: izvēlējos tādas 4. frekvences un atbilstošie pini - 90hz-RB4, 110hz - RB5, 130hz - RB6, 150hz - RB7.
Kā viss stŗadā - piespiež piemēram 90hz pogu - iedegas RB4. Piespied velreiz - izdziest. Var atstāt iedegtu jebkuru vai vairākus pinus un izdegt jebkuru citu - karoch visās iespējamās kombinācijās. Nu vismaz simulācijā strādā ideāli.
Paldies marizo un Jdat par palīdzību.
Gatavais kods:


```
;======90hz - RB4 , 110hz - RB5, 130hz - RB6, 150hz - RB7======;
;======================================================;
list p=16F84A
#include p16f84a.inc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

sample         equ 1eh ;30
flag1               equ 1fh  ;31 ;tmr0 sample paņemšanas atļaujas karogs
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 00h                           ;programma sakas ar 0to adresi
goto main                      ; parlekt interupt vektoram (adresei 04h)
org 04h                            ;interupt vektors
goto interupt

;=======main============;
main    
bsf status,5   ;uz bank1
movlw b'00010000' ;00010000 RA4 ieeja, parejaas izejas
movwf trisa
movlw b'00000001' ; RB0 ieeja, parejas izejas
movwf trisb 
movlw b'01101000' ;RA4 counter, no prescaler, INT uz rising edge
movwf optionreg  
bcf status,5   ;atpakal uz bank0
movlw b'10010000' ; INT  interupts      
movwf intcon
clrf portb
clrf sample
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
loop

btfss sample,3 ;ja 3. bits '0' tad goto next
goto next
btfss sample,2 ; ja 2. bits '0' tad goto I90_101
goto I90_101
btfss sample,1 ; ja 1. bits '0' tad goto rb6
goto rb6
btfss portb,7 ; Toggle mehanisms, ja RB7=0 tad goto RB7_1
goto RB7_1
bcf portb,7 ;ja RB7=1, tad 0
clrf sample
goto next
RB7_1 bsf portb,7 ;RB7=0, tad 1
clrf sample            ;Parejiem piniem tas pats
goto next
rb6 btfss portb,6
goto RB6_1
bcf portb,6
clrf sample
goto next
RB6_1 bsf portb,6
clrf sample
goto next
I90_101 btfss sample,1 ; ja '0' tad goto rb4
goto rb4
btfss portb,5
goto RB5_1
bcf portb,5
clrf sample
goto next
RB5_1 bsf portb,5
clrf sample
goto next
rb4 btfss portb,4
goto RB4_1
bcf portb,4
clrf sample
goto next
RB4_1 bsf portb,4
;;;;;;;;;;;delay 1s;;;;;;;;;;;;;;;
next	clrf sample
     cblock 20h
	r1
	r2
	r3
    endc
	movlw	0x08
	movwf	r1
	movlw	0x2F
	movwf	r2
	movlw	0x03
	movwf	r3
Delay_1
	decfsz	r1, f
	goto	$+2
	decfsz	r2, f
	goto	$+2
	decfsz	r3, f
	goto	Delay_1
	goto	$+1
	nop
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
bcf flag1,0 ; resetot flagu - nu interuptaa atkal drikst panemt sampli
goto loop

;==========interupt===========;
interupt 
btfsc flag1,0 ; ja flag 0tais bits '1', iziet no interupt, ja '0', turpinaat
goto endint
clrf tmr0 ;resetot tmr0 registru
;;;;;;;;;;;;;;;;;;;; delay 100 ms ;;;;;;;;;;;;;;;;;;;;;;;;;;
        cblock 28h
	p1
	p2
	endc
	movlw	0x1F
	movwf	p1
	movlw	0x4F
	movwf	p2
Delay_0
	decfsz	p1, f
	goto	$+2
	decfsz	p2, f
	goto	Delay_0
	goto	$+1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movf tmr0,0 ; pec 1s panemta tmr0 vertiba, ieraktita W, tad panemts sample 
movwf sample
bsf flag1,0 ; uzstadit karogu, ka nedrikst panemt sampli
endint bcf intcon,1 ;nolaist INT karogu
retfie ; iziet no interupt ruttiinas
;=============================;
end
```

 Tomēr taisīšu arī pulti uz MCU ar kvarcu ,jo vajag precīzas tās frekvences. Tas nākamais etaps.  :: 
Labs ir šovakar jābeidz   ::

----------


## next

> Nu vismaz simulācijā strādā ideāli.


 Pie reaaliem dzelzhiem veel neesi kjeeries?
Tad iistie piedziivojumi veel priekshaa.
Piemeeram IR uztveereejs - kad signaals no pults nenaak tas verkjis uzskruuvee sev pastiprinaajumu tiktaal ka saak reagjeet uz trokshnjiem un izejaa paraadaas lieki impulsi.
Kaa tavs dekoders uz tiem reagjees?

----------


## next

> Kāpēc man lauzīt galvu un domāt label


 Kas tur ko lauziit, pats esmu rakstiijis lab1, lab2, lab3....
Ja tiek taisiits modulis ko izmantos citas programmas sastaavaa un vienaadi labelji nevarees sadziivot tad vajag palasiit par direktiivaam macro un local.
Rekur progza kur izmantoti agraak uztaisiiti un paarbaudiiti modulji.


```
#include	serial.inc
#include	head.inc
#include	asetv_m.inc
#include	remer_m.inc
#include	func.inc
#include	act_m.inc

	ORG	0	
sak	call	init
	btfsc	PORTA,2
	goto	sak
	call	aset
	goto	sak
	ORG	100
	asetv_m
	ORG	200
	func
	remer_m
	ORG	280
	serial
	ORG	300
	act_m
	end
```

----------


## habitbraker

> Nu vismaz simulācijā strādā ideāli.
> 
> 
>  Pie reaaliem dzelzhiem veel neesi kjeeries?
> Tad iistie piedziivojumi veel priekshaa.
> Piemeeram IR uztveereejs - kad signaals no pults nenaak tas verkjis uzskruuvee sev pastiprinaajumu tiktaal ka saak reagjeet uz trokshnjiem un izejaa paraadaas lieki impulsi.
> Kaa tavs dekoders uz tiem reagjees?


 tur jau tā lieta, ka  vins uztvers tikai tos signālus kuriem 0,1 sekundes laikā tiks saskaitīts noteikts impulsu skaits (uz tām 4 frekvencēm) .
Bet ja tā padomā varbūt vajag, lai uztver 90hz +/-5hz utt nevis precīzi 90hz?

----------


## habitbraker

Kāpēc interrupt karogu (piemēram INTF) nevar resetot ārpus interupt bloka, jeb pēc retfie?

----------


## JDat

> Kāpēc interrupt karogu (piemēram INTF) nevar resetot ārpus interupt bloka, jeb pēc retfie?


 Saskaņā ar manu (rievu) grāmatiņu un laikam arī datasheet tas ir pateikts, ka T0IF, INTF un RBIF jānomet softiski (pašam kodā jaieraksta lai nomestu). Lai nav pārsteigumu, tas jādara pirms atgriešanās no interrupta. Kāpēc tev būtu vajadzīgs nomest INFT karogu kad neesi interruptā? Izklausās pēc partizāniska gājiena vai slikti izdomāta algoritma. Ir arī tāda lieta (palasi datasheet) kā Interrupt masking bits. Tie karogi atļauj vai aizliedz izsaukt konkrētu Interrupt. Bez tam jaglobāli jānobloķē interrupt, tad lieto GIE karogu.
Piemēram:

Setup daļa vai main loop:
Nobloķējam GIE lai neizsauc interruptus, kamēr taisam setup.
Nomaskējam interruptus, kuri mums nav vajadzīgi.
Aktivizējam GIE lai mums darbojas vajadzīgie interrupt.

Interrupt procedūra:
Saglabājam W un Status reģistrus.
Analizējam interesējošos interrupt karogus (T0IF, INTF vai RBIF).
Analizējam atļaušanas karogus (jo T0IF, INTF vai RBIF mainās arī tad kad maskā ir aizliegts izsaukt augstākminētos interruptus)
Pieņemam lēmumu kādas darbības tālāk darīt (Your code here)
Nometam vajadzīgos interrupt karogus.
Atjaunojam W un Status reģistrus
Izejam no interrupt procedūras.

----------


## habitbraker

Nu pēc līdzīgas procedūras arī kodēju, bet kāpēc nevar piemēram pirms iziešanas no interupt izdzēst INTE tādā veidā izlēdzot viņu un bsf atkal galvenajā koda daļā? Darot tā (bcf,intcon,4 pirms retfie) man interupts notikek vienu reizi, bet izskatās, ka nemaz nenonāk līdz bsf,intcon,4 galvenajā kodā?

----------


## JDat

Kaut ko es nesaprotu...
Iemet kodu (ieteicams ar maksimāli daudz komentāriem un samēra pilnu nevis gabaliņu). Pēc tam ņem rokā http://camstudio.org/ šo softu un uzfilmē MPLAB simulaciju. Gribu saknē izprast problēmu.

----------


## JDat

Pamatjautājums: Kāpēc aiztikt INTF main loopā? Kamēr nejūti kā strāda PIC fīčas, jādara, tā kā teikts datasheet. Ja jūti kā PIC strādā, tikai tad var atļauties eksmerimentus. Be ne jau sevis izdomātu sistēmu likt uzreiz projekta kodā. No sākuma jāuztaisa makets fīčas testēšanai. Man bija situācija ar Atmel AtTiny2313, kur vajadzēja lietot SLEEP un pamodināt ar pogu. No sākuma uzrakstīju atsevišķu kodu (jaunu projektiņu), ar kura palīdzību midžināju LEDus lai tikai saprastu kas īsti notiek ar SLEEP un interrupt un tad, kad sapratu kā darbojas un kur ir zemūdens akmeņi, tikai tad modificēju testa kodu un izmantoju savā projektā.

PS: Humoram: Tam SLEEP projektam joprojām nav līdz galam uzrakstīta firmware. Slinkums redziet.  ::

----------


## habitbraker

Patiesībā man viss sitais ir tikai lai saprastu kā tas PIC sancē  :: 
Kodu varu iemest. Ko es tur filmēšu  ::  Problēma vārdiski - pirms retfie resetoju INTE un uzstādu atpakaļ main blokā pēc aiztures. Domāju, ka vajadzētu būt tā - notiek interupts, izpildās int rutīna, nonāk atpakaļ main loop un pēc aiztures atkal iespējams interupts. (Protams man sitais bija ar visp nozīmes reģistriem uztaiīts - vienkārši intereses pēc tā gribās). Simulācijā kautkas nestrādā.


```
;======90hz - RB4 , 110hz - RB5, 130hz - RB6, 150hz - RB7======;
;======================================================;
list p=16F84A
#include p16f84a.inc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

sample         equ 1eh ;30
flag1               equ 1fh  ;31 ;tmr0 sample paņemšanas atļaujas karogs

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 00h                           ;programma sakas ar 0to adresi
goto main                      ; parlekt interupt vektoram (adresei 04h)
org 04h                            ;interupt vektors
goto interupt

;=======main============;
main    
bsf status,5   ;uz bank1
movlw b'00010000' ;00010000 RA4 ieeja, parejaas izejas
movwf trisa
movlw b'00000001' ; RB0 ieeja, parejas izejas
movwf trisb 
movlw b'01101000' ;RA4 counter, no prescaler, INT uz rising edge
movwf optionreg  
bcf status,5   ;atpakal uz bank0
movlw b'10010000' ; INT  interupts      
movwf intcon
clrf portb
clrf sample
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
loop

btfss sample,3 ;ja 3. bits '0' tad goto next
goto next
btfss sample,2 ; ja 2. bits '0' tad goto I90_101
goto I90_101
btfss sample,1 ; ja 1. bits '0' tad goto rb6
goto rb6
btfss portb,7 ; Toggle mehanisms, ja RB7=0 tad goto RB7_1
goto RB7_1
bcf portb,7 ;ja RB7=1, tad 0
clrf sample
goto next
RB7_1 bsf portb,7 ;RB7=0, tad 1
clrf sample            ;Parejiem piniem tas pats
goto next
rb6 btfss portb,6
goto RB6_1
bcf portb,6
clrf sample
goto next
RB6_1 bsf portb,6
clrf sample
goto next
I90_101 btfss sample,1 ; ja '0' tad goto rb4
goto rb4
btfss portb,5
goto RB5_1
bcf portb,5
clrf sample
goto next
RB5_1 bsf portb,5
clrf sample
goto next
rb4 btfss portb,4
goto RB4_1
bcf portb,4
clrf sample
goto next
RB4_1 bsf portb,4
;;;;;;;;;;;delay 1s;;;;;;;;;;;;;;;
next	clrf sample
     cblock 20h
	d1
	d2
	d3
	endc
	movlw	0x03
	movwf	d1
	movlw	0x18
	movwf	d2
	movlw	0x02
	movwf	d3
Delay_1
	decfsz	d1, f
	goto	$+2
	decfsz	d2, f
	goto	$+2
	decfsz	d3, f
	goto	Delay_1
	goto	$+1
	goto	$+1
	goto	$+1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
bsf intcon,4
;bcf flag1,0 ; resetot flagu - nu interuptaa atkal drikst panemt sampli
goto loop

;==========interupt===========;
interupt 
;btfsc flag1,0 ; ja flag 0tais bits '1', iziet no interupt, ja '0', turpinaat
;goto endint
clrf tmr0 ;resetot tmr0 registru
;;;;;;;;;;;;;;;;;;;; delay 100 ms ;;;;;;;;;;;;;;;;;;;;;;;;;;
        cblock 28h
	p1
	p2
	endc
	movlw	0x1F
	movwf	p1
	movlw	0x4F
	movwf	p2
Delay_0
	decfsz	p1, f
	goto	$+2
	decfsz	p2, f
	goto	Delay_0
	goto	$+1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movf tmr0,0 ; pec 1s panemta tmr0 vertiba, ieraktita W, tad panemts sample 
movwf sample
;bsf flag1,0 ; uzstadit karogu, ka nedrikst panemt sampli
endint bcf intcon,4
bcf intcon,1 ;nolaist INT karogu
retfie ; iziet no interupt ruttiinas
;=============================;
end
```

 aizkomentētās instukcijas ir kā es to pau dariju ar parastiem registriem

----------


## JDat

Šis darbojas tā:


```
bcf intcon,4
```

 Aizliedam RB0 interruptu.

 Main lōopā tu atļauj attiecīgo interruptu. Lai būtu korektāk pirms maini interrupt atļaujas, no sakuma nomet GIE. Savādāk interrupt mezgls vēl var apvainoties un sākt darīt to ko viņš ggrib nevis to ko tu gribi.
Izmaini INTFE un tad atkal atļauj GIE.
Tas pirmkārt.

Otrkārt:
Pa cik izskatās ka tev ir tikai viens interrupt avots manipulē ar GIE nevis ar INTFE.

Treškārt:
Kas tev nestrādā simulatorā? Laikam atkal kaut ko salauzi partizāniskā veidā labojot failus  ::

----------


## habitbraker

Paldies pameģināšu. 

Jā RB0 un tmr0 ieejas man ir savienotas kopā - reizē laižu abās to frekvenci.

Es simulēju ar ISIS profesional

----------


## JDat

Atver MPLABā savu projektu.
Paņem Project->Build Options...->Project
Logā paņem MPASM assembler un ieliec keksi: Disable case censitivity
Nevajag labot .inc failus

 ::

----------


## JDat

> Paldies pameģināšu. 
> 
> Jā RB0 un tmr0 ieejas man ir savienotas kopā - reizē laižu abās to frekvenci.
> 
> Es simulēju ar ISIS profesional


 Filosofisks jautājums: Kāpēc jārausa interrupt kamēr skaiti impulsus ar timer? To tu softā nobloķē. Slabo skaitīt laiku starp interruptiem?  ::

----------


## habitbraker

Eh. to GIE nomešanu/pacelsanu pamēģināju - nekas nestrādā. Laikam jātmet tā doma  :: 
Nu interuptu jau noraustu tikai pie pirmā impulsa. Pec tam jau ir 0.1 delay, kad skaitās. 
Bet šitā metode dzīvē sūdīgi strādā - pamēģināju jau. Kautkāda cita metode jaizdomā jebkurā gadījumā.

rekur, ja interesē mana IR pults progamma  ::  TAgad testu sakarā biski sacakarēta - interupts ir uz RB0 nevis un portb4:7 izmaiņu.



```
;///////IR pults////////////
list p=16F84A
#include p16f84a.inc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

flag1         equ d'29' 
flag2               equ d'30'  

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 00h                           ;programma sakas ar 0to adresi
goto main                      ; parlekt interupt vektoram (adresei 04h)
org 04h                            ;interupt vektors
goto interupt

;=======main============;
main    
bsf status,5   ;uz bank1
movlw b'11110001' ; RB7:RB4 ieejas, parejas izejas
movwf trisb 
movlw b'01001000' ;int uz rising edge
movwf optionreg
bcf status,5   ;atpakal uz bank0
movlw b'10010000' ;  int
movwf intcon

;-------------------------------------------;
loop0	
goto loop0
;============interupts==============;
interupt
;.................................;
btfsc portb,7 ;izlaist nakamo, ja 0. Ja 1 tad next....
goto RB7
btfsc portb,6
goto RB6
btfsc portb,5
goto RB5
btfsc portb,4
goto RB4
;..............................;
RB7
movlw d'30' ;30=2*15. 15 ir 150hz impulsi 0,1 sekundee
movwf flag2
loop1 
call delay7
bsf portb,1
call delay7
bcf portb,1
decfsz flag2,1 ;flag-1=flag, ja 0 tad parlekt 
goto loop1
clrf flag2
goto beigt
;..............................;
RB6
movlw d'26'
movwf flag2
loop2 
call delay6
bsf portb,1
call delay6
bcf portb,1
decfsz flag2,1
goto loop2
clrf flag2
goto beigt
;..............................;
RB5
movlw d'22'
movwf flag2
loop3 
call delay5
bsf portb,1
call delay5
bcf portb,1
decfsz flag2,1
goto loop3
clrf flag2
goto beigt
;..............................;
RB4
movlw d'18'
movwf flag2
loop4 
call delay4
bsf portb,1
call delay4
bcf portb,1
decfsz flag2,1
goto loop4
clrf flag2
goto beigt

;=======delay rutiinas===========;
delay4 ;0,005555 s. 90hz pusperiods
	cblock d'31'
	d1
	d2
	endc
	movlw	0x56
	movwf	d1
	movlw	0x05
	movwf	d2
Delay_0
	decfsz	d1, f
	goto	$+2
	decfsz	d2, f
	goto	Delay_0
	goto	$+1
	nop
return
delay5 ;0.00454545 s. 110hz pusp.
	cblock d'34'
	e1
	e2
	endc
	movlw	0x8C
	movwf	e1
	movlw	0x04
	movwf	e2
Delay_1
	decfsz	e1, f
	goto	$+2
	decfsz	e2, f
	goto	Delay_1
	goto	$+1
return
delay6 ;0.00384615 s 130hz pp
	cblock d'37'
	c1
	c2
	endc
	movlw	0x00
	movwf	c1
	movlw	0x03
	movwf	c2
Delay_2
	decfsz	c1, f
	goto	$+2
	decfsz	c2, f
	goto	Delay_2
	goto	$+1
	nop
return
delay7 ; 0.00333333s 150hz pp
	cblock d'41'
	k1
	k2
	endc
	movlw	0x9A
	movwf	k1
	movlw	0x03
	movwf	k2
Delay_3
	decfsz	k1, f
	goto	$+2
	decfsz	k2, f
	goto	Delay_3
return
;==================================;

beigt bcf intcon,1
retfie
end
```

----------


## JDat

> Eh. to GIE nomešanu/pacelsanu pamēģināju - nekas nestrādā. Laikam jātmet tā doma 
> Nu interuptu jau noraustu tikai pie pirmā impulsa. Pec tam jau ir 0.1 delay, kad skaitās. 
> Bet šitā metode dzīvē sūdīgi strādā - pamēģināju jau. Kautkāda cita metode jaizdomā jebkurā gadījumā.


 Ne kādus delay iekš interrupt! Tā ir lieka laika tērēšana un MCU dzīšana nevajadzīgos ciklos. Interrrupt jābūt maksimāli īsam lai tas pēc iespējas mazāk bremzētu main loop. Tā ir gan uz datora, gan arī kontrolieros ieteicams. Izdomā koncepciju pa jaunu.

Piedāvāju lai timer skrien no iekšējā clk. Izrēķini cik reizes sekundē timer pārpildās. Tālāk iekš timer irq nolasi portb0 vai kuru tev vajag. Saglabā kaut kur PIN stāvokli. Nākošajā interruptā salīdzini esošo un saglabāto PIN stāvokli. Ja nav mainījies, tad nedari neko (vai varbūt  dari kaut ko). Ja ir izmanījies stāvoklis tad attiecīgi rīkojies. Protams seko tam ka vienā brīdī bus izmaiņa no 0 uz 1, citā brīdī no 1 uz 0. Nevajadzīgo ar softa palīdzību ignorē. Uztais mainīgo, kas skaita cik reize timer irq izsaukts. Ar tā palīdzību varēsi sekot līdzi cik ilgi tev ir bijis 1 uz PINa un cik ilgi bija ). Saliec šo kopā un koncepts gatavs. Tas arī ir mans kretīniskais multitasking.

----------


## next

Paartraukumaa kaut ko dariit ar GIE nav nekaadas jeegas.
Jo tas jau ir 0.
Meegjinaajums uzstaadiit 1 var izraisiit rekursiivu paartraukuma izsaukshanu (man liekas ka izgatavotaajs to nav paredzeejis un rezultaats nav viennoziimiigi zinaams (veel mazaak var ticeet ka simulators shai situaacijaa darbosies taapat kaa reaals dzelzis)).
Ja negribi lai izejot no paartraukuma GIE= 1 tad instrukcijas retfie vietaa liec return.

PS. Vispaar jau sen nesaprotu ko tu tur dari. Bet tas ir normaali.  ::   Tagad vairs nesaprotu ko gribi izdariit.  ::

----------


## JDat

Offtopic: Var vispār bez interrupt dzīvot.  :: 
Uzliec katram notikumam savu MCU un gatavs.
Parallax Propeller vienā korpusā ir astoņi akmeņi (core). Intel atpūšas  :: 
Uzliec vienu Cog (tā saucas core) uz impulsu skaitīšanu otru uz signāla detektēšanu, trešo uz datu izvadi ārā.  :: 
Nevajadzēs čakarēties ar interrupt, ko propelleros nav tāda kā sugas  ::

----------


## habitbraker

Nu tāpat iepostošu, lai nedomā ka padevos  :: 
uzprogrammēju to uztvērēju pavisam pēc cita principa. Nedaudz nošpikoju no RC5. Nosūtu impulsu virkni ar kopējo garumu 5biti jeb 100ms. Pirmās 60ms jeb 3 bitu ir atpazīšanas kods, lai piemēram kautkādi trokšņi no IR demodulatora neiespaidotu. Citiem vārdiem sakot ignorē nekorektus signālus. Atpazīšanas kods visiem signāliem viens un tas pats. Atlikušās 40 ms ir priekš 2 bitu koda. Katrs bits 20ms. Vairāk priekš 4 pogām man nevajag. Tad jau vienkārši ar RB0 interuptu un aizturītēm nolasu bitus. 
Šeit es vel iegūto 2 bitu kodu tikai izvadu uz portb, lai parbaudītu darbībā. Dzīvē strādā ideāli savienojot kontrolierus ar vadu. Kapēc lai nestrādātu ar IR ? 


```
list p=16F84A
#include p16f84a.inc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
cblock d'30'         
flag
flag2              
endc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 00h                           ;programma sakas ar 0to adresi
goto main                      ; parlekt interupt vektoram (adresei 04h)
org 04h                            ;interupt vektors
goto interupt

;=======main============;
main    
bsf status,5   ;uz bank1
;movlw b'00010000' ;00010000 RA4 ieeja, parejaas izejas
;movwf trisa
movlw b'00000001' ; RB0 ieeja, parejas izejas
movwf trisb 
movlw b'00101000' ;counter uz ieksejo clk, no prescaler, INT uz falling edge
movwf optionreg  
bcf status,5   ;atpakal uz bank0
movlw b'10010000' ; INT interupt
movwf intcon
clrf flag
;clrf flag2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
loop
movf flag,w
movwf portb
goto loop


;========interrupt=================;
interupt 
clrf flag  ; no sakuma parbuda vai korekts signals - ik pa 20ms parbauda rb0. JA 001 tad korekts, ja ne tad iziet no interupta
call delay 
btfsc portb,0 ;ja 0 tad turpinat
goto beigt
call delay
call delay
btfsc portb,0 ;ja 0 tad turpinat
goto beigt
call delay
call delay
btfss portb,0 ; ja 1 tad turpinat
goto beigt
call delay 
call delay
btfsc portb,0 ;ja 1 tad uzstadit flag. ja 0 tad parlekt (uzstadas 0)
bsf flag,4
call delay
call delay
btfsc portb,0
bsf flag,5
;movlw b'00000001' ; toggle flip flop
;xorwf flag2,1

goto beigt

delay ; 10ms
         cblock d'40'
	d1
	d2
	endc
	movlw	0xCF
	movwf	d1
	movlw	0x08
	movwf	d2
Delay_0
	decfsz	d1, f
	goto	$+2
	decfsz	d2, f
	goto	Delay_0
	goto	$+1
return
beigt 
	cblock d'44' ;0.5 sek
	j1
	j2
	j3
	endc
	movlw	0x03
	movwf	j1
	movlw	0x18
	movwf	j2
	movlw	0x02
	movwf	j3
Delay_1
	decfsz	j1, f
	goto	$+2
	decfsz	j2, f
	goto	$+2
	decfsz	j3, f
	goto	Delay_1
	goto	$+1
	goto	$+1
	goto	$+1


bcf intcon,1
retfie
end
```

----------


## RobinDAB

> Nu gribās savu protokolu tomēr. Kādas 4 komandas būtu pietiekamas, piemēram 100, 120, 140 un 160Hz.


 Laikam tas procis tev ģenerēs nesošo uz IR LED? Vai kā?
Ja tā, tad nu tas viss tā diezgan pikanti būs. Īpaši ar tiem 100 hz.
Varbūt arī darbosies, bet tikai pie izslēgta apgaismojuma....
 ::

----------


## habitbraker

Nē procis generēs un apstrādās tikai komandu kodus. Nesējfrekvence būs 36khz

----------


## JDat

> Nē procis generēs un apstrādās tikai komandu kodus. Nesējfrekvence būs 36khz


 negribi arī 36 kHz ar PIC ģenerēt? Ietaupīsi uz vienu mezglu, jo nevajadzēs ārējo ģeneratoru lodēt.

----------


## marizo

Tagad nevaru atrast, bet ir redzēta tāda lieta RC5 raidīšanai, ka IR LED ir pie diviem PIC izvadiem - uz viena nesējfrekvence 36 kHz taisnstūris, uz otra zemākas frekvences modulējošais signāls.
Ja nemaldos, programma uz pārtraukuma ģenerēja 36 kHz, bet modulējošo signālu dabūja, skaitot pārtraukuma izsaukšanas reizes (vienā loģiskajā "1" ir n 36kHz periodi).

----------


## JDat

hmm. interesanta ideja...
ja abas kājas ir fāzē, tad ne ko nesūta, ja kājas ir pretfāzē, tad sūta. tikai kur ir jēga tā taisīt? Nav vienkāršāk ar vienu kāju uztaisīt? vienu kāju ieekonomē un pietiek ar vienu tranzistoru buferim, ja kontrolieris pats nepavelk strāvu.

----------


## marizo

Hmm, varbūt kaut ko jaucu. Padomāju - tiešām tā jau nav jēga taisīt. 
Varbūt tas bija PICs ar PWM hardware (16F876/877)? Tad jau uzstādām 36kHz izejā un aizmirstam.

----------


## next

Da nevajag tur nekaadu PWM.
Taadas lietas uztaisaamas programiski ar paartraukumu no TMR0 vai bez taa, eertaak uz 2 izejaam, signaalu sumeeshanai viens reziiklis vajadziigs.

----------


## habitbraker

> negribi arī 36 kHz ar PIC ģenerēt? Ietaupīsi uz vienu mezglu, jo nevajadzēs ārējo ģeneratoru lodēt.


 Šodien saspraudu visu uz breadboard plates un pamērīju strāvu ko noēd pults - ap 10mA. Novienoju 555 un samazinājās līdz 0.5ma (sleep). Tāka laikam būs arī 36khz jaģenerē ar PIC.

Arī pamēģināju kopumā - strādā baigi labi ar visu IR. Izmainīju signāla atpazīšanas kodu no 3 bitiem uz 7. Prasījās, jo pieliekot pie IR sensora dienasgaismas lampu un slēgājot vislaik iekšā/ārā kautkā pamanījās ik pa laikam kāds falšs signāls apiet manu atpazišanas sitēmu  ::  Ej nu sazin ko tās lampas tur ģenerē uz on/off.
Pieliku arī kodu, kas atbilsotši saņemtajam 2bitu kodam ieslēdz vai izslēdz atbilstošo izeju. Darīju tā - pieskaitīju to bin kodu PC. Tas aiziet uz atbilstošo goto un visu izdara. interuptā uztādās flag3 ko mazā ciklinā visu laiku parbaudu. Tādā veida nav visu laiku jāiet ciklā cauri visiem portb utt ka bija manās ieprieksejas versijās. 


```
list p=16F84A
#include p16f84a.inc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
cblock d'30'         
flag
;flag2
flag3              
endc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 00h                           ;programma sakas ar 0to adresi
goto main                      ; parlekt interupt vektoram (adresei 04h)
org 04h                            ;interupt vektors
goto interupt
;
;=======main============;
main    
bsf status,5   ;uz bank1
movlw b'00000001' ; RB0 ieeja, parejas izejas
movwf trisb 
movlw b'00101000' ;counter uz ieksejo clk, no prescaler, INT uz falling edge
movwf optionreg  
bcf status,5   ;atpakal uz bank0
movlw b'10010000' ; INT interupt
movwf intcon
clrf flag
clrf flag3
clrf portb
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
goto loop
sakums movf flag,w
addwf PCL,f ;ieguto bin kodu pieskaita PC. Tas parlec par attiecigam vietam un goto. tad 
goto RB7
goto RB6
goto RB5
goto RB4
;
RB7 btfsc portb,7 ; ja 1 tad 0, ja 0 tad 1 (toggle)
goto low7 
bsf portb,7 
bcf flag3,0 
goto loop 
low7 bcf portb,7
bcf flag3,0
goto loop
RB6 btfsc portb,6 ;;;;tas pats kas ar Rb7 utt..
goto low6
 bsf portb,6
bcf flag3,0
goto loop
low6 bcf portb,6
bcf flag3,0
goto loop 
RB5 btfsc portb,5
goto low5
bsf portb,5
bcf flag3,0
goto loop
low5 bcf portb,5
bcf flag3,0
goto loop
RB4 btfsc portb,4
goto low4
bsf portb,4
bcf flag3,0
goto loop
low4 bcf portb,4
bcf flag3,0
goto loop
;
loop btfsc flag3,0 ;lielako dalu pavada seit. Ja flag3 0tais bits 1 tad kautko dara ar portb
goto sakums 
goto loop
;
;========interrupt=================;
interupt 
clrf flag  ; no sakuma parbuda vai korekts signals - ik pa 20ms parbauda rb0. JA 0010101 tad korekts, ja ne tad iziet no interupta
call delay ;5ms 
btfsc portb,0 ;ja 0 tad turpinat
goto beigt
call delay ;10ms kopa
call delay
btfsc portb,0 ;ja 0 tad turpinat
goto beigt
call delay
call delay
btfss portb,0 ; ja 1 tad turpinat
goto beigt
call delay 
call delay
btfsc portb,0 ; ja 0 tad turp
goto beigt
call delay
call delay
btfss portb,0 ;ja 1 tad turp
goto beigt
call delay 
call delay
btfsc portb,0;ja 0 tad turp
goto beigt
call delay
call delay
btfss portb,0 ; ja 1 tad tupinat
goto beigt
call delay
call delay
btfsc portb,0 ;ja 1 tad uzstadit flag. ja 0 tad parlekt (uzstadas 0)
bsf flag,1
call delay
call delay
btfsc portb,0
bsf flag,0
bsf flag3,0 ;atlauj kautko darit ar portb
goto beigt
;
delay ; 5ms
         cblock d'40'
	d1
	d2
	endc
	movlw	0xE7
	movwf	d1
	movlw	0x04
	movwf	d2
Delay_0
	decfsz	d1, f
	goto	$+2
	decfsz	d2, f
	goto	Delay_0
	goto	$+1
return
beigt 
bcf intcon,1
retfie
end
```

----------


## habitbraker

Viss ideāli  ::  Tiku vaļā no tā 555.
Pults kods. Ar visu sleep


```
;///////IR pults////////////
list p=16F84A
#include p16f84a.inc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
cblock d'25'
flag1      
flag2
flag3     
endc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 00h                           ;programma sakas ar 0to adresi
goto main                      ; parlekt interupt vektoram (adresei 04h)
org 04h                            ;interupt vektors
goto interupt
;
;=======main============;
main    
bsf status,5   ;uz bank1
movlw b'11110000' ; RB7:RB4 ieejas, parejas izejas
movwf trisb 
bcf status,5   ;atpakal uz bank0
movlw b'10001000' ; portb change int
movwf intcon
bcf portb,1
;
;-------------------------------------------;
loop0
sleep ;energijas taupisanas rezims. iziet ja interupts, atgriezoties atkal sleep
goto loop0
;============interupts==============;
interupt
;.................................;
;
btfsc portb,7 ;izlaist nakamo, ja 0. Ja 1 tad next.... Nem vera tikai ja portb manas no 0 uz 1
goto RB4 
btfsc portb,6
goto RB5
btfsc portb,5
goto RB6
btfsc portb,4
goto RB7
goto beigt ; ja portb mainas no 1 uz 0 tad iziet no interupta
;..............................;
RB7 ;00 -binarais kods kas tiek aizsutits
call h36khz ;ap 36khz 10ms ilgi
call h36khz
bcf portb,1
call delay
call h36khz
bcf portb,1
call delay
call h36khz
bcf portb,1
call delay  ;sakuma (atpazisanas koda) beigas. komandas koda sakums
call h36khz 
call h36khz
bcf portb,1
goto beigt
;..............................;
RB6 ;01
call h36khz
call h36khz
bcf portb,1
call delay
call h36khz
bcf portb,1
call delay
call h36khz
bcf portb,1
call delay ;sakuma beigas
call h36khz
bcf portb,1
goto beigt
;..............................;
RB5 ;10
call h36khz
call h36khz
bcf portb,1
call delay
call h36khz
bcf portb,1
call delay
call h36khz
bcf portb,1
call delay   ;sakuma beigas
call delay
call h36khz
bcf portb,1
goto beigt
;..............................;
RB4 ;11
call h36khz
call h36khz
bcf portb,1
call delay
call h36khz
bcf portb,1
call delay
call h36khz
bcf portb,1
call delay   ;sakuma beigas
call delay
goto beigt
;===================================;
delay ;10,5ms
	cblock d'30'
        d1
	d2
	endc
	movlw	0x33
	movwf	d1
	movlw	0x09
	movwf	d2
Delay_0
	decfsz	d1, f
	goto	$+2
	decfsz	d2, f
	goto	Delay_0
	goto	$+1
return
;;;;;;;;;;;;;;;;;;;;;;36khz 10ms ilgi;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
h36khz 
movlw d'240'  ; tik daudz 36khz periodi noskaitas 10ms laikaa (ieskaitot call,decfsz utt laikus)
movwf flag1
movlw d'100' ;papildus registrs jo pirmaja nepietika vietas (255 max)
movwf flag2
loop
bsf portb,1
;
goto	$+1 ;12us aizture. 
	goto	$+1
	goto	$+1
	goto	$+1
	goto	$+1
nop
nop
bcf portb,1
;	
goto	$+1 ;atkal 12us utt
	goto	$+1
	goto	$+1
	goto	$+1
	goto	$+1
nop
nop
decfsz flag1,f ;ja 0 tas parlec uz loop2
goto loop
loop2 bsf portb,1
;
goto	$+1 ;atkal
	goto	$+1
	goto	$+1
	goto	$+1
	goto	$+1
nop
nop
bcf portb,1
;	
goto	$+1
	goto	$+1
	goto	$+1
	goto	$+1
	goto	$+1
nop
nop
decfsz flag2,f ; ja 0 tad return
goto loop2
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;==================================;
;
beigt
call delay ; pushbutton debouncing aizture (var ilgāk ari)
call delay
call delay
call delay
call delay
call delay
call delay
call delay
 bcf intcon,0
retfie
end
```

----------


## habitbraker

Labs vakars visiem!
Mēģināju uzprogrammēt keypadu ar PIC16f84a un ir saadas tādas problēmas.
Programmai neko derīgu nevajadzētu darīt tikai nolasīt pogu un saglabāt atmiņā. (izvadit uz PORT A cik nu atļauj kājas). Tas tikai tā sākumam lai notestētu.
Daru tā - No sākuma rindas ir ieejas un kolonnas izejas. Uz kolonnām bin0. piespiežot pogu palaižas portb izmaiņas INT un tiek nolasīta rinda. Tad apaminītas izejas ar ieejām - rindas tagad izejas , kolonnas ieejas, uz rindām bin0. Nolasu kolonnas. sagalabaju to visu atmiņā un palaižu uz porta.
Problēma - piespiežot kadu no pogām portb sāk trakot un ģenerēt impulsus (no visām kājām)  un nekas cits nenotiek ::   Simulācijā gļuko un dzīvē arī tas pats.
Nu nevaru saprast kas par problēmu  :: 
Kods:


```
list p=16F84A
#include p16f84a.inc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
cblock d'25'
flag1      
flag2
;flag3 
endc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 00h                         
goto main                     
org 04h                           
goto interupt
;
;=======main============;
main    
bsf status,5   
movlw b'11110000' 
movwf trisb 
movlw b'00000000'
movwf trisa
bcf status,5   
movlw b'10001000' ; portb change int
movwf intcon
clrf portb
clrf porta
clrf flag1
;-------------------------------------------;
goto loop1
loop2 movf flag1,w ;flag1 izvada uz porta 
movwf porta
bcf flag2,0 ;atgriezas loop1 ciklā
;
loop1 btfsc flag2,0 ;visu laiku skatas vai nav noticis INT
goto loop2 ; ja noticis tad iet uz loop2
goto loop1
;============interupts==============;
interupt
bsf flag2,0 ;uzstaada karogu, ka noticis INT
clrf flag1
movf portb,w ;nolasa portb(rindas), ievieto W
andlw B'11110000' ;Dzesh 0-3bitu, saglabaa W
movwf flag1; W saglabaa atminaa
;
bsf status,5   ;apmaina PORTB ieejas as izejām
movlw b'00001111' 
movwf trisb 
bcf status,5
 ;
clrf portb
movf portb,w ;nolasa portb(kolonnas), ievieto W
andlw B'00001111' ;dzesh 4-7bitu, rezultāts saglabats W 
iorwf flag1,1 ;pievieno rezultatu flag1
;
bsf status,5   ; atkal rindas ieejas, kolonnas izejas (atkal pa vecm lai atkal iespejams portb change int
movlw B'11110000'
movwf trisb
bcf status,5
 clrf portb
;
bcf intcon,0
retfie
end
```

 SHēma:

----------


## JDat

Tāks! Sāksim no attāluma. Izskatās ka gribi uztaisīt IR raidītāju (vai kā tur viņu) uz 16 pogām...
Shēma: PA4 pa tiešo uz IR diodi caur pretestību (ja pietiek strāvas). IR diode pret +5V (vai cik tur ir). PA0-PA3 stabiņi bez pretestībām, PB5-PB7 rindiņas. PB0-PB4 gaisā. 

dim stabinadati(4)   ;4 atmiņa šūnas,  kurās glabājam katra stabiņa skenētos datus

Init:
IRQ OFF    ;lai neraustās, kad nevajag
PA0-PA3 OUT ;stabiņi
PA4 OUT ;IR diode
PA0-PA4 ON    (ja šie no tad ne pogas ne IR nav aktīvi)

PB0-PB7 IN
Aktivīzējam PullUP pretenes PB portam (skatīt datasheet)

IRQ uz PB change

Main loop:
IRQ ON   ;esam gatavi strādāt
SLEEP  ;ejam gulēt
IRQ OFF  ;lai nerausta, kamēr skenējam klavieri

gaidam 50 ms (debounce)

Kontrole=0
stabiņadati(0 līdz 4)=&HFF

for i=0 to 3
ja stabiņadati(i)<>&HFF tad 
     stabiņš=i
     kontrole=kontrole+1
end IF
next i

ja kontrole<>1 tad goto main  ;ne kas nav nospiesta vai vairākas pogas nospiestas, ejam gulēt

analizējam kura poga nospiesta
sūtam pa IR projām

goto main   Darbs padarīts, ejam gulēt

END

;***********************************
SUB skenētstabiņu(indata)
PA ON
PA(indata) OFF

stabinadati(indata)=PB
return

SUB sūtampaIR(dati)
bit1
delay(uS)
bit2
delay(uS)
utt
return

;*********************
Interrupt:
return    ;nav ko darīt, jo iRQ domāts tikai paodināšanai


Advancētā versijā timer var iesaistīt delay lietām un ar IRQ gan mosties, gan timer kontrolēt


Izskatās ka habitbaker safanojies par Manu kretīnisko multitasking un nav līdz galam izpratis nianses.  :: 

Šis ir apsolīti pretējs piemērs multitaskingam. IRQ tiek izmantots tikai lai pamostos. Pārējo izdara main loop. 

Varēju jau labāk uzrakstīt, bet sākumam pietiek.


EDIT: kā vienmēr aizmirsu. 
Pēc IRQ OFF nodzēšam mainīgos stabiņadati un kontrole kā arī tava protokola mainīgos. Savādāk būs brīnumi.

----------


## JDat

Habitbaker, izlasi manu atbildi vēkreiz, jo:




> kā vienmēr aizmirsu. 
> Pēc IRQ OFF nodzēšam mainīgos stabiņadati un kontrole kā arī tava protokola mainīgos. Savādāk būs brīnumi.

----------


## habitbraker

Hmm... Paldies par atbildi
 Skatījos skatījos uz tavu algoritmu bet nespēju izsekot. Nesapratu ko tu daudzās vietās domāji.
no štās vietas nesaprotu  :: 



> Main loop:
> IRQ ON ;esam gatavi strādāt            
> SLEEP ;ejam gulēt
> IRQ OFF ;lai nerausta, kamēr skenējam klavieri


 



> analizējam kura poga nospiesta


 Mani interesē tieši šitā lieta. Varbūt vari apskatīties manu ASM kodu (sakomwentēju cik vareju). Interesē kapēc piespiežot jebkuru pogu portb sāk ģenerēt kautkādus impulsus bezsakarā. Bez tiem pullup rezistoriem manā shēmā nekas tāds neotiek.

----------


## JDat

Svešu kodu reizēm grūti analizēt. Pārējo (bes tās pogu) analīzes saprati?
Tātad pirms pogu analīzes mēs noskenējam klaviatūru. To saprati?
Pēc skenēšanas mums ir tā, ja poga nospiesta:
stabinadati0=&H7F
stabinadati1=&HFF
stabinadati2=&HFF
stabinadati1=&HFF

Atmetam četru jaunākos bitus. Šajā piemērā, mūs interesē tikai &H7x bet neinteresē &HxF
Jo analizējam tikai PB4-PB7 (PB0-PB3 mūs neinteresē, jo nav pieslēgti)
mazaiz x domāts ka tur ir jebkurš skaitlis.

Tad ir apmēram tā:
ja stabinadati0=&H7x tad pirmā poga
ja stabinadati0=&HBx tad otrā poga
utt

Seko līdzi kad ir binārie dati, kur ir 0 un kur ir 1.
Seko kā binārie pārvēršas par HEX.
Sākumam uzzīmē shēmu, pēc tā ko pastāstīju.
Palasi par PIC kontroliera pullup datasheetā.

----------


## habitbraker

Paldies,bet Laikam nepareizi pateicu. Tieši tā pogas skenēšana man interesē - tā rindu un kolonnu nolasīšana. Pēc iegūtajiem datiem jau pats izlobītu, kura poga tika nospiesta. Tas ir tas kas manā kodā negrib strādāt - tā vietā gļuki.
Un kāda atšķirība no pic iekšējā pullup un ATtiny pullup? PICam kautkāds weak pullup ar pliku trani bez pretestības. Vins kautkā to trani  daļēji atver tā kadarbojas kā pretestība?

Atvaino Jdat laikam izklausos mulķīgi, bet tavi pseido kodi(BASIC?) kautkā nelec man  ::

----------


## JDat

par BASIC viss OK. Es pats reizēm nesaprotu.  ::  Par ASM, sorry, nezinu tik labi asm lai no galvas rakstītu. ASM grāmata ir darbā. Datasheet slinkums atvērt tagad.

AVR pullup var katram INpurtam atsevišķi ieslēgt. PIC16F84 var ar viena bita palīdzību ieslēt PullUp uzreiz visam PortB. Sūdīgi ne? Tieši tāpēc PB ir kā in. Pretestībai vajadzētu būt arī PICam. Man savulaik pogas tā strādāja bez problēmām.

Tātad skenēāna. Pa stabiņiem no PA0 līdz PA3 nāk ārā spriefums un PB4-PB7 nāk iekšā. Pa cik pullUP ir pret barošanu, ja pogas nav nospiestas, tad uz PB būs vieninieki.
Lai uzskatītu ka poa ir nospiesta, tad uz PB jāpadod nulle Voltu. Kā?
Attiecīgi nevajadzīgos stabiņus ieslēzam (iedodam tur Log 1). Stabiņu kuru pašreiz pārbaidi, iedod LOG 0, tad lasi PB.

pseidokoda gabals skenēšanai (uztaisi ar cikliem lai nav garš kods):
gaidam 50 ms (debounce)

PA0=0       ;PA1-PA3 jābūt LOG1
nop   ;jāpagaida kamēr porti nostājas, savādāk (pie MHZ ātrumiem) mēdz gļukot.
nop
stabinadati0=PB     ;lasam rindas
;ja kāda poga (vai vairākas) nospiesta, tad PB nebūs FF, bet gan cits (pats izpēti kas būs)
nop
nop
PA0=1
nop
nop
PA1=0
nop
nop
stabindati1=PB
nop
nop
PA1=1
nop
nop
PA2=0
nop
nop
stabindati2=PB
nop
nop
PA2=1
nop
nop
PA3=0
nop
nop
stabindati3=PB
nop
nop
PA3=1
;tagad visos mainīgajos stabinudati (4 gab) mums ir visu skenēšanu rezultāti varam analizēt un secināt.


Offtopic: no sākuma izeksperimentē ar vienu pogu un LEDu pullup lietas, lai saprastu kas un kā strādā:


;Pullup ON   ;nokomentēts pēc tam ieslēgsi
Pullup OFF  ;pēc tam šo nokomentē un ON aktivizē

PB4 IN
PA0=Out

Main:
ja PB4=1 tad 
   PA0=1 
citādi 
  PA=0
END IF
goto main:

----------


## habitbraker

Nu tas kam jābūt uz porta pogas nospiešanas bŗīdī es sapratu un tavu domu arī laikam sapratu. Tikai liekas, ka tavs variants ir  neefektīvs, jo sanāk, ka jāiet cauri katrai kolonnai atsevišķi. Mēģināšu savu domu pastāstīt latviski. Shēma tā pati. 
Izmantoju tikai PortB un internal pullup neizmantoju. No sākuma PB4-PB7 ir uzstādīti kā ieejas (lai varētu notikt INTerupts) un PB0-PB3 kā izejas. Kā tu teici, dēļ pullup rezistoriem uz ieejām (PB4-PB7) ir log1. Uz 'PB0-PB3 padodu log0. Tagad sanāk, kad piespiežu kādu no PB, tā log0 tiek savienota ar kādu no PB4-PB7. Atkarībā no rindas kurā PB atrodas es varu nolasīt no portb šadas kombinācijas: 0111 0000, 1011 0000,1101 0000,1110 0000. Saprati manu domu? Tad tur pat interupt rutīnā apmainu izejas ar ieejām (tagad PB4-PB7 ir izejas un PB0-PB3 ieejas) un nolasu kolonnu kurā poga atrodas. Attiecīgi šādas portb kombinācijas - 0000 011X, 0000 101X utt.  (x tāpēc ka tikai 3 kolonnas)
Sasummējot abus iegūšu info par pogu, piemēram, 0111 0000 + 0000 011X = 0111 011X. un tā tālāk
Problēma kautkas nestrādā kā vajag. Bet kapēc lai nestrādātu tā mana doma?

----------


## JDat

viena no idejām ir NOP ielikšana tur kur vajag. Nedrīkst uzreiz rakstīt portā un tad lasīt. bišku jāpagaida.
Pēc katra PB IN/OUT virziena miņas, read un wrote ieliec pa venav ai divien NOP vai delay uz dažām mikrosekundēm.

Vispār padomāšu par tavu ideju. Vai var, un ja var tad kā varētu strādāt.

----------


## next

> Problēma kautkas nestrādā kā vajag. Bet kapēc lai nestrādātu tā mana doma?


 Pastaasti kaa tas izskataas kad "nestrādā kā vajag".

----------


## JDat

No otras puses...
Nu un ka neefektīvi?
Nav jau gigabiti un megaherci jālasa, bet gan tikai lietotāja pogas...
Tur var nesteigties.Vienīgi, lai kods labāk skatās, jātaisa ar ciklu nevis tā kā pēdējā piemērā.

----------


## habitbraker

Tā  nestrādāšana izpaužas kā bezsakarīga impulsu generešana no pORTB. Gandrīz kā ierosināšanās  :: 

NOPi starp OP un IP maiņu nelīdz

----------


## next

> Tā  nestrādāšana izpaužas kā bezsakarīga impulsu generešana no pORTB. Gandrīz kā ierosināšanās 
> 
> NOPi starp OP un IP maiņu nelīdz


 Baigi skops apraksts.
Iesaakumaa saved kaartiibaa konteksta saglabaashanu un atjaunoshanu paartraukumaa.
Un tad raksti detalizeeti - kad, kur, ko tur redz uz taa porta.

----------


## JDat

NEgribi vienkārši 
iedod uz RB1=0; RB2=1; RB3=1 nolasīt RB4-RB8
iedod uz RB2=0; RB1=1; RB3=1 nolasīt RB4-RB8
iedod uz RB3=0; RB1=1; RB2=1 nolasīt RB4-RB8

Nevajadzēs papildus Pullup pretenes. Kāda jēga steigties. Nefektīvi? Kas neefektīvi, Nevari LOOP ciklu uzrakstīt? Tā visa pasaules dara. Ko un kapēc tu mēģini panākt nav skaidrs.




> ...No sākuma PB4-PB7 ir uzstādīti kā ieejas (lai varētu notikt INTerupts) un PB0-PB3 kā izejas. Kā tu teici, dēļ pullup rezistoriem uz ieejām (PB4-PB7) ir log1. Uz 'PB0-PB3 padodu log0. Tagad sanāk, kad piespiežu kādu no PB, tā log0 tiek savienota ar kādu no PB4-PB7. Atkarībā no rindas kurā PB atrodas es varu nolasīt no portb šadas kombinācijas: 0111 0000, 1011 0000,1101 0000,1110 0000. Saprati manu domu? Tad tur pat interupt rutīnā apmainu izejas ar ieejām (tagad PB4-PB7 ir izejas un PB0-PB3 ieejas) un nolasu kolonnu kurā poga atrodas. Attiecīgi šādas portb kombinācijas - 0000 011X, 0000 101X utt.  (x tāpēc ka tikai 3 kolonnas)


 Vai nu nav kaut kas izdomāts līdz galai vai nu es neasprotu pagaidām. Ja tev visi OUT ir log. 0, kā zināsi kura poga nospiesta? No sākuma pamēģini parasto, pēc tam taisi advancētu ķīmiju. Visa pasaule tā dara (parasto skenēšanu). Tev nevajag megahercu ātrumā skenēt.

Pareizu pogu reakcijas laiku ideju smēlos no šejienes:
http://www.sei.cmu.edu/reports/90tr008.pdf 
http://www.sei.cmu.edu/library/abstr...ts/90tr008.cfm
http://en.wikipedia.org/wiki/Avionics_software

Protams pieslīpējot timig lietas ar dzīvu agregātu.
Laikam esmu traks!  ::

----------


## habitbraker

Paldies par atbildēm  ::  Sovakar tikai nav spēka stukot.  Rīt mēģināšu..
JDat, ja man visos outputos ir log0 tad piespiežot PB šī nulle tiek savienota ar inputu kur ir log1 defaultā. T;ad;a veidā tas 1 parvēršas arī par 0 un varu nolasīt jau minētās kombinācijas no portb. Apmainot vietām attiecīgi IP uz OP varu nolasīt kolonnas ...

----------


## JDat

Nu bļin... Principa pēc pamēģināšu ar emulatoru, bet man sajuta ka kaut ko tu neesi izdomājis līdz galam vai sajaucis kodēšanā. Bez tam šeit interrupt neprasās kā suga. Ja vien varbūt tikai tavai metodei vitāli nepieciešams.

Uzliec timer interrupt, lai pārpildās uz ~ 36 kHz un būs tev ģenerators.

----------


## habitbraker

NU tas būtu baigi labi. Prasītu padomu pasniedzējam bet vins tik AVR un parsvarā C atzīst.

Nu to ģeneratoru itkā atrisināju iepriekš

----------


## habitbraker

Problēmu atrisināju  ::  Pavisam citu algoritmu izmantoju. Nekādas ieejas pret izejām nemainu un vajadzīgi tikai 4 pullup rezīši. Iepriekšējo kodu tā arī nesalaboju - teorētiski tam vajadzetu strādāt, bet nu mistiski..   ::  
Sanāca īsāks kods un pēc pogas nospiešanas iegūstu bināro kodu, ko tad arī izvadu uz porta (testa nolūkos pagaidām). Izmantošu tā - pie PC pieskaitīšu to binkodu un tas aizlēks uz atbilstošo goto un darīs attiecīgas lietas  :: 
Kodu slinkums stāstīt. Ja kādam interesē man nav žēl koda :


```
list p=16F84A
#include p16f84a.inc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
cblock d'25'
flag1      
flag2
;flag3 
endc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 00h                         
goto main                     
org 04h                           
goto interupt
;
;=======main============;
main 
bsf status,5   
movlw b'11110000' 
movwf trisb 
movlw b'00000000' ;porta visas izejas
movwf trisa
bcf status,5
movlw b'10001000' ; portb change int
movwf intcon
clrf porta
clrf portb
clrf flag1
;-------------------------------------------;
goto loop1
loop2 movf flag1,w ;flag1 izvada uz porta 
movwf porta
clrf portb ; atkal izejas 0, lai var notikt int
bcf flag2,0 ;atgriezas loop1 ciklā
;
loop1 btfsc flag2,0 ;visu laiku skatas vai nav noticis INT
goto loop2 ; ja noticis tad iet uz loop2
goto loop1


;============interupts==============;
interupt
btfss portb,4 ;parbauda vai nav interupts uz pogas atlaishanu
goto sakt      ;pilda interupt rutiinu tikai uz pogas piespiesanu.
btfss portb,5
goto sakt
btfss portb,6
goto sakt
btfss portb,7
goto sakt
goto beigt
  sakt bsf flag2,0 ;uzstaada karogu, ka noticis INT
  clrf flag1 ;pogas kartas skaitlis
  movlw b'11111011' ;pirmaa kolonna
  movwf portb
rowtest incf flag1 ;parbauda rindas/katreiz flag1+1 
            btfss portb,4 ; ja 0 tad tas nozime, ka PB piespiests .Taatad beigt
             goto beigt
             incf flag1 ; ja 1, turpinat parbaudit
             btfss portb,5
             goto beigt
             incf flag1
             btfss portb,6
             goto beigt
             incf flag1
             btfss portb,7
             goto beigt
rrf portb,f ; parsledzas uz nakamo kolonnu
btfsc status,0 ;ja 0 tad visas kolonnas jau bijusas --> beigt
goto rowtest ;skenee rindas nakamajaa kolonnā
beigt 
bcf intcon,0
retfie
end
```

----------


## next

> Problēmu atrisināju  Pavisam citu algoritmu izmantoju. Nekādas ieejas pret izejām nemainu un vajadzīgi tikai 4 pullup rezīši. Iepriekšējo kodu tā arī nesalaboju - teorētiski tam vajadzetu strādāt, bet nu mistiski..


 Briinumi nenotiek, ja nestraadaa tas kam buutu jaadarbojas tad tas noziimee ka kautkas nav pareizi.
Svariigaak par programmas sacereeshanu ir maaceet atrast un izlabot pieljautaas kljuudas.

----------


## kaspich

lai iepriecinaatu next.
par multitasking teemu.

PIC 16 series uzstaada paartraukumu karogus, neskatoties uz to, vai konkreetais interrupt ir/nav atljauts.
tb, ja ir chupa ar paraleeliem taskiem ar dazhadiem paartraukumiem [rbo, piemaaram, aarejiem datiem, rb4..7 klavierei, veel kaadi briinumi no taimeriem], tad 
peec int izsaukuma nepietiek chekot, kuri flagi uzstadiiti. naakas veel chakareeties ar statusa regjistra apskati [ar to tad arii jaasak]. zaroshana nejeedziiga.

shii jaukaa lieta iipashi nav akcenteeta, atskjiriibaa no portu lasiishanas/rakstiishanas iipatniibaam.
man sen atpakalj naacaas uzrauties, varbuut kaadam noder.

----------


## JDat

ti\o lietu lasīju par krievu manuāli. Bija pieminētas šis nianses. Vienīgi man nebija aktuāli, jo pamatā iznāk tā ka tikai vienu IRQ sourci interrupt rutīna apstrādā.

----------


## kaspich

veel siikums, bet nemaniju:

ja klavieri skenee, kaa ieteica Jdat [standarta risinaajums], tad katras PIC izejas kjeedee diodes [ar katoru pret izeju, ja pullUp ir uz +5].
citaadi, ja nospiediis vairaakas pogas vienlaiciigi, buus iisais.

----------


## JDat

es devu rekomendāciju lai uzliek katrai pogai un nav "ghost keys" problēma. IMHO (jo negribu domāt šobrīd) diode pie katras pogas arī atrisina kaspich pieminēto problēmu. Protams galaicīgi likt kaudzi ar diodēm, bet tomēr silti iesaku.

----------


## habitbraker

Zinu, ka AVR ir taada fīča, bet vai PIC ir iespējams pārtraukums pārtraukuma laikā?
Jaameģina ieslēgt laikam GIE interupta laikā, bet diemzēl tāds triks kautkā nepatīk PICam

----------


## marizo

PIC16 nebūs. Bet PIC18 ir pārtraukumiem prioritātes.

----------


## kaspich

> Zinu, ka AVR ir taada fīča, bet vai PIC ir iespējams pārtraukums pārtraukuma laikā?
> Jaameģina ieslēgt laikam GIE interupta laikā, bet diemzēl tāds triks kautkā nepatīk PICam


 
nu jaa, prastajos vinjsh GIE hardwariski nomet.

nu, var jau softiski emuleet vairaaklimenju int: nolasi int bitu, izsauc apakshprogrammu, atljauj augstaka limenja int. ja tas iestaajas, izsauc naakosho subprogrammu. logjiski, ka visi [status, option un arii izmantotie regjistri] jaaveido atseviskji jeb arii jaaglabaa baigos stekos..

----------


## habitbraker

Laikam nederees. Soreiz vajag 2 lietas reizē darīt - uztvert IR signālu(aiziet vismaz 100ms, lai nolasiitu) un vadīt simistoru. 
Viekaarsa shēmina dos impulsu tajā brīdī, kad 220V šķersos 0, izraisot pārtraukumu pēc kura tad, attiecīgi IR uztvertajam signālam ar aizturi tiks padots impulss simistoram. Nu lampu dimmeris ar tālvadību .
 Mēģināju visu apvienot 16f84, bet problēma tāda, ka uztverot ir signālu, sanāk, ka vismaz pieci 50hz periodi iztrūks, dēļ tā, ka tajā laikā tik lasīts IR signāls. Nez to varēs manīt ar aci?
Doma izmantot divus 12fus lai lasot IR signālu netiktu pārtraukta 220V graizīšana...

----------


## JDat

kāpēc uzreiz visu iekš irq jābāž? Irq izsaucas kad iet caur 0 un uzliek karogu. Main kods apstrādā situāciju. Ir uztvērējam līdzīgi. Savādāk izklausās pēc epy style. Ja tev vajadzēs midžināt 3 ledus (1 hz, 2 hz, 3 hz attiecīgi) izmantosi 3 timerus vai vienu?

----------


## Slowmo

Lasi IR signālu pa bitiem, tad lasīšanas laikā var nostrādāt pārtraukums, kas ātri izpilda savu darbu un atgriežas atpakaļ pie lasīšanas rutīnas. Starp IR uztvērēja signāla līmeņa maiņu (0->1 vai 1->0) droši vien ir kāda milisekunde, kuras laika daudz var pagūt izdarīt.

----------


## next

Es savaa laikaa taadu taisiiju uz pic12f629 (16f84 nedereeja jo tur nav tmr1 un intrc)
IR uztvershanu noteikti jaaveic fona uzdevumaa citaadi gaisma dikti raustiisies.
Man domaat par faazu dimmeriem jaasak aizmirst, driizumaa kaveelspuldzes tikai tirguu pie kontrabandistiem pirksim - sigareti, spirtik, vodka, lampochki...  ::

----------


## kaspich

> kāpēc uzreiz visu iekš irq jābāž? Irq izsaucas kad iet caur 0 un uzliek karogu. Main kods apstrādā situāciju. Ir uztvērējam līdzīgi. Savādāk izklausās pēc epy style. Ja tev vajadzēs midžināt 3 ledus (1 hz, 2 hz, 3 hz attiecīgi) izmantosi 3 timerus vai vienu?


 +1
tb, IR lasaas pa bitiem.
uz katru bitu izsaucas irq. peec irq avota un porta [attieciigaa] staavoklja piefikseeshanas lec aaraa no irq.
pamatliimenii apstraadaa gan ir [ar augstaaku prioritaati], gan 100hz pussiinusu. sore, man jau izskataas, ka F84 uz 4mhz ir par sherpu  :: 

ver 2.
irq skjiroshana nosaka, kas par ceeloni.
ja ir, tad irq laikaa [pobitno] fiksi tiek veidots ir kods [baiti, cs kontrole, u.t.t.] un modificeeti ir_input regjistri.

ja irq ceelonis ir 50/100hz, tad pamatsoftaa vnk uzstaada timeri un irq peec taa faazu regulatoram.
ja ir matemaatika ir paaraak gara [tas var izsaukt dziteri/mirgoshanu], ir paartraukuma apstraades laikaa ik pa briidim [kodaa] kontroleejam timer irq [100hz in/lampa_on] un vajadziibas gadiijumaa lecam aaraa, lai fiksi izpildiitu sho operaaciju. shajaa gadiijumaa naaksies dublet visus ir un dimmer apstraades regjistrus [ieskaitot matemaatikai - reiz/daliishanai nepiecieshamos].

----------


## kaspich

> Es savaa laikaa taadu taisiiju uz pic12f629 (16f84 nedereeja jo tur nav tmr1 un intrc)
> IR uztvershanu noteikti jaaveic fona uzdevumaa citaadi gaisma dikti raustiisies.
> Man domaat par faazu dimmeriem jaasak aizmirst, driizumaa kaveelspuldzes tikai tirguu pie kontrabandistiem pirksim - sigareti, spirtik, vodka, lampochki...


 
nu jau, nu jau.. par 18. seriju nedomaaji?  :: 
nahrena 2 taimeri?
IR inpur pie portb0 [tur bija ext int, pareizi?]
100hz 0 detect pie portb4, piemeeram [int uz izmainju]
darbojies ar vienu. piesietu IR [kaa ar augstaako F].
pie katras paarpildiishanaas incf timer_virtual_1
meeram timer_virtual_1 veertiibu, kad ir 0 detect 100hz ieejaa, veidojam fapch [PLL]
peec IR datiem nosakam faazi [korigjeejam peec Ueff], izrejinam taimera veertiibu, pie kuras jaaiesleedz spuldze [sheit muusu paartaukumi beidzaas, jaakontrolee softiski, bet nav nekas mega, mieriigi var vnk nochekot bitu katru reizi, kad IR timer paarpildaas]..
i viss.. tik prasti, ka pat par softu gruuti nosaukt.. :P

----------


## kaspich

laikam saaku atcereties pagaatni  :: 

taatad, leetajos PIC mums ir pilniga beedu ieleja: mums ir viens irq vektors, mums nav irq prioritaates..
kaa sho ligu risinaat.

piemeers: mums ir IR ieeja [ar saliidzinoshi lielu bitrate], tajaa pat laikaa paraleeli 100hz kontrole [bez ariii tai vajag augstu precizitaati].

portb0 sleedzam pie IR_input
uz katru bitu [in izmainju] ejam paartraukumaa.
shii IR paartraukuma laikaa meegjinam padariit pamatlietas: atshifreet paketes saakumu, start/stop bitus, ierakstiit data_in regjistrus, paarbaudiit checksummu, u.c.
ja shis apreekjins ir paarak garsh, un var mazinaat otra procesa [100hz kontroles] precizitaati, daram sekojoshi:
IR int darbiibas [matematikas laikaa] dalam blokos
paveicot katru bloku uzstaadam attieciigu bitu regjistraa ir_int_process
uzreiz peec tam [peec bloka pabeigshanas] kontroleejam 100hz paartaukuma bitu, ja ir uzstaadiits, lecam aaraa no irq, uzstaadot bitu par piespiedu exit
apstraadaajam 100hz paartraukumu [shajaa briidii daram tikai pashu aktuaalaako - timer nonulleeshana vai porta/izejas uzstaadishana], chekojam piespiedu exit bitu
ja piespiedu exit=1, manuaali uzstaadam irq bitu, kas atbilst portb0
atljaujam irq
iekriitam 04 vektoraa, peec ir_int_process bitiem nokljustam vajadziigajaa vietaa, turpinam ir datu aprekjinu.

ok, shaadu gemoru ir veerts izveeleeties, ja nav citu variantu [shitik prastaa uzdevumaa taadi, protams, ir 117]. bet, ja savaadaak nevar - naakas bakstiities..

----------


## Slowmo

Var darīt arī vēl krutāk. Tā kā plus/mīnus zināms, kad pienāks nākošais 100Hz pārtraukums, pirms IR pārtraukuma apstrādes var iečekot, cik daudz laika aptuveni palicis līdz nākošajam pusperioda sākumam. Ja var iekļauties veikt visas kalkulācijas (tāpēc man patīk ASM, jo var fiziski saskaitīt instrukcijas un aprēķināt laiku), apstrādājam IR, ja nevar, sagaidam 100Hz pārtraukumu un tikai tad apstrādājam IR pārtraukumu. Laika atskaitei var taimeri izmantot, kurš tiek atstatīts pie katra pusperioda.

----------


## JDat

slowmo, kas notiks ja gaidot ir apstrādi, ir jau pārmetās no 1 uz 0?  ::

----------


## kaspich

> Var darīt arī vēl krutāk. Tā kā plus/mīnus zināms, kad pienāks nākošais 100Hz pārtraukums, pirms IR pārtraukuma apstrādes var iečekot, cik daudz laika aptuveni palicis līdz nākošajam pusperioda sākumam. Ja var iekļauties veikt visas kalkulācijas (tāpēc man patīk ASM, jo var fiziski saskaitīt instrukcijas un aprēķināt laiku), apstrādājam IR, ja nevar, sagaidam 100Hz pārtraukumu un tikai tad apstrādājam IR pārtraukumu. Laika atskaitei var taimeri izmantot, kurš tiek atstatīts pie katra pusperioda.


 fail. to var dariit, piemeeram, komunikaacijai starp 2 taadiem luuzeriem/f84. bet, ne shajaa gadiijumaa.

iedomaajies - Tu paveers pulti pret to suuda sleedzi, a vinjsh nenostraadaa, jo ir sagadijies, ka IR nepietika laika liidz 100hz 0 detektam  :: 
nee, shajaa gadiijumaa obligati jaappastraadaa KATRS IR un katrs 0 detect [pat, ja PLL ljautu to nedariit].

savulaik starp 2 aiznjemtiem f84 komunikaacija bija aptuveni sekojosha:

1. send procis dod int, ka tuvaako 20mS laikaa buus briivaaks, un ir jauni dati
2. receive procis paarkaarto uzdevumus, izkaarto briivu laiku, ja iespejams, dod apstiprinajumu
3. ja ir apstiprinajums, send procis 3X [max] ar kaut kaadu intervaalu meegjina suutiit datus [dod mark izejaa]
4. recieve procis notiekti kaadu no 3X atsaucas, sanjem datus, apstiprina
5. ja receive procis p.2 nedeva akceptu [ir aparaak aiznjemts], send procis paarkaarto uzdevumus un asap organizee naakoshaas sesijas..

bet nuu.. tas veel pie nosaciijuma, ka pat icd2 nebija, nekaadu tur breakpointu, jtag, debagu, nekaa..  ::   ::  un vadiiti tiek visaadi stepperi ar mikrosoljiem un dimmeri uz 100hz..

----------


## kaspich

veel iisais monologs.

100hz 0 detektam hardwariski noteikti LPF + histereeze.
softiski: peec int un kaut kaada delay port_in staavoklja kontrole [ja staavoklis atkal nomainiijies - taatad - viltus trauksme, ejam aaraa]
ja staavoklis nav nomainiijies, uzstaadam taimeri [var softiski, precizitaate nav vajadziiga] uz kaadaam.. piem 2mS, kuru laikaa aizliedzam int peec 0 detect [lai neizsauktu atkaartotu int].
piedevaam,jaanjem veeraa, ka sliktaakajaa gadiijumaa Fin var varieeties, un int peec 0 detekta [pat, ja tiek izmantots PLL - to arii vajadzeetu] jaaparedz +-/5..10% rezerve, tb, +/-1mS vismaz.
attieciigi, peec slowmo idejas vismaz 2mS jaaignoree IR int, kas nav pieljaujams pat pie ljoti zema bitrate.

edit:
iistenibaa tas +/-1mS logs vairaak tiks izmantots delj taa, ka tiiklaa nepaartraukti mainaas sine forma. pie noslodzes mainjas tas 0 punkts 'biidaas'. tb, ja nesimulee sine jeb pilniigi neuzticaas leenam PLL [sheit var saakties citi briinumi] taas 2mS butu minimums, ar ko jaarekjinaas [arii, atlasot nepareizos 0 punktus].
+normaali buutu meeriit Upeak [kaut vai], lai izkompensetu taa izmainjas [cik tas iespeejams]. 
+PLL [kaa jau mineeju], citaadi pie maza spilgtuma buus dumiibas - nestabilitaate, u.t.t.

----------


## Slowmo

Labi, ja 0 detektēšanas apstrādei vajadzīgas 2ms, tad cita lieta, bet es saprotu, ka 0 šķērsošanas gadījumā PICam tiek padots impulss. Tādā gadījumā var simistora vadīšanai daudz laika nevajadzēs un būs vēl tālu līdz nākošajam IR pārtraukumam, lai to nepazaudētu. Bet varbūt vispār nav nekādas prioritātes jāievieš. Cik tad daudz laika vajag IR bita apstrādei? Gan jau ne vairāk kā 0,1ms, kas pie 4Mhz ir 100 instrukcijas. Tā kā 100Hz pārtraukums ir katras 10ms, neredzu problēmu.
Lielākā problēma jau autoram bija, ka 0 detektēšanas pārtraukuma apstrāde tiek apturēta uz visu IR signāla nolasīšanas laiku (100ms). Ja pārtaisa signāla lasīšanu pa bitam, tādas problēmas vairs nav.

----------


## kaspich

slow, cto to paaraak gudri neizklausaas.
1. par to impulsu, kad ir 0 ieejaa no 100hz - jau rakstiiju. 
a) viltus paartraukumi deelj isiem piikiem
b) atkaartoti paartraukumi delj drebezga ap 0
c) 0 dreifs, dziters, Fin mainja - viss kopaa

2. savukaart, ja Tu esi gatavs vismaz 0.1mS apstraadaat IR bitu, tad 0 detect nolasiishanas dziters var buutiski palielinaaties [jeb reakcija uz PLL ieksheejo karogu], kas noziimee - pie maza spilgtuma [kur ir liels dU/dt] saaksies raustiishanaas.

----------


## JDat

varbūt var iztikt bez zero crossing vingrojumiem? Lai dzelži ar to nodarbojas. Tā pat kā epja smd cepeškrāsnī.

----------


## kaspich

nu, pag, kaa Tu to iedomaajies?
mcu faazu regulatoram paver jaunas un efektiivas iespeejas:
1. umax/min Fin kontroli un autodetektu
2. pll, kas noziime - stabilitaati pie suudiigaaka signaala
3. preheat
4. korektu code/Pout detektu
5. Uin kompensaciju
6. stabilitaati pie maziem atveeruma lenkjiem, u.t.t.

atpakalj pie dzelzhiem - atpakalj uz 80tajiem :P

----------


## JDat

kaspič, tu esi ģēnijs! Jau piespiedi iekurbulēt pc un pameklēt šo to.  ::

----------


## JDat

Pasaciņa par to kā EPIS būvēja SMD krāsni...
http://www.elfa.lv/forum/viewtopic.php?f=1&t=1661

Nafig tas te iederās? Epis cīnījās ar simistora vadību, kas pieslēgts pie AVR. Tauta rekomendēja dzelzisku risinājumu ar zero crossing deteltora palīdzību (kaut kāda mikrene), kā rezultātā AVR kods vienkāršojas. Tagad lasu, meklēju un kartos no smiekliem.  ::

----------


## JDat

Par dzelzisko zero crossing biju domājis kaut ko līdzīgu šitam: http://www.fairchildsemi.com/ds/MO/MOC3041-M.pdf

Paldies Vikingam par pieminēšanu SMD krāsns topikā.
Nez vai tam ir sakars ar 80-tajiem...


Ja jau 80-tie, tad...
Tajos laikos debesis bija zilākas, zāle smeķīgāka un mūzika labāka.  ::

----------


## next

Sveiciens teoreetikjiem no praktikja.
Aizrauties ar spilgtuma stabilizaaciju nav jeegas - mazas sprieguma izmainjas nav pamanaamas, pie lielaam tik un taa spozhuma izmainjas nenoveerst.
Dimmerim jaabuut apmaacaamam darboties ar dazhadu sisteemu IR pultiim.
Adekvaati jaareagjee uz iislaiciigiem un ilgstoshiem elektriibas paartraukumiem.
Veel ljoti noderiiga buus pakaapeniska iesleegshanaas (lampinjas taupaas) un izsleegshanaas (lai pa gaismu tiekam no istabas laukaa).

PS. Es jau ar saakumaa gribeeju to visu pic12c508 sabaazt.  ::

----------


## JDat

> PS. Es jau ar saakumaa gribeeju to visu pic12c508 sabaazt.


 Gribēji? A neiebāzi? Kāpēc neiebāzi? Nopirki gatavu iekārtu veikalā? Pastāsti sīkāk.  ::

----------


## next

> Gribēji? A neiebāzi? Kāpēc neiebāzi? Nopirki gatavu iekārtu veikalā? Pastāsti sīkāk.


 Visu peec kaartas vajag lasiit - sabaazu 12f629.

----------


## kaspich

pag, pag, kas par huinju.
moc3041 ir optrons ar zero krossingu. tas nekaadi nederees faazu regulatoram.
otrkaart, tas ir optrons. optiskaas atsaistes elements.. kaads tam vispaar sakars? un veel ar koda atviegloshanu.


cien. praktikji. oponeeshu.
knjizku chital.

taatad, U stabilizaacija pie maziem atveeruma lenkjiem ir buutiska, jo - tieshi pie maza spilgtuma jebkuras u/Popt svaarstiibas baigi mana.
par pakaapenisko ieslegshanos - jaa, vai nu shaadi, vai preheat [meerkjis viens].

----------


## JDat

Ui ku sarežģīti. Tā ir ka teorētiķis ne kad nav vadījis 220V. Doma bij tāda ka iegāz impulsus no MCU a zrro crossing stuff lietas izdara pats optrons. Varbūt kļūdījos. Nesitiet uzreiz pa galvu...  ::

----------


## kaspich

pag, pag.
konkreetais devaiss iesleedz slodzi briidii, kad spanis iet caur 0, novershot Ion.
faazu reguleeshana ir kas PILNIIGI preteejs - slodze apzinaati tiek ieslegta briidii, kad Uin NAV 0. taapeec to sauc par fazes reguleeshanu - Uin un iesleegshanas momentu faazes ATSKJIRAS.
reizeem man ir sajuta, ka no gudraam sprieshanaam par multitaskjingu mums ir jaatgriezhas.. sadaljaa.. elektronikas pamati.

ee, offtopiks - kaa var remonteet apriikojumu, na nav skaidrs, kaa darbojas pamatlietas? :P

----------


## JDat

Nu kā? Nafig man tiristoru. Gasmas neremontēju. Retos gadījumos tiristors parādās modernajos Crown aparātos shēmas mezglā ar labu nosaukumu: crowbar circuit. Funkcija arī amizanta. A principā, ja puildu savu funkciju, tad ar to pietiek. Netaisos šķūnēt aparātus.

----------


## kaspich

nu, tiristorus daudzi liek [ampos]
palaishanas mezglos [c uzlaade vai trafu palaishana]
aizsardziibaa [dc gadijumaa iisina izeju]

optronus izmanto:
visa veida komunikaacijai starp out stage uz barotaaju un atpakalj [dc, overload, u.t.t.] u.c. mezglos..
nav nemaz tik maaaz :P

----------


## habitbraker

Tagad jau te man ir info atlikulikām  ::  Paldies!
Nu man tas IR protokols ir paša domāts  ::  ar viena bita garumu 10ms. Jādara būs tā laikam - uz RB0int ies 0 crossing signāls bet biti tiks nolasīti ar aizturi ko veidos tmr0. (pirmo uztverto bitu detektēs portbchange int) Pie tmr0 owerflowa tiks nolasīts bits. Pēc bita nolasīšanas atkal uzstādīšu taimeri un tā tālāk.  Tādā veidā, kamēr gaidu nākamo IR bitu, varēšu skaitīt aizturi main cikklā un dot impulsus simistoram. 
Nemsu 20mhz kvarcu, lai tās bitu nolasīšanas procedūras praktiski neietekmētu main cikla aiztures.
Vienīgi kas būs ja 0 crossing iekritīs tieši tad, kad tiks nolasīts bits, bet var'but paspēšu ja tas impulss būs kādu 1ms plats.... ee jaštuko   ::

----------


## JDat

> nu, tiristorus daudzi liek [ampos]
> palaishanas mezglos [c uzlaade vai trafu palaishana]
> aizsardziibaa [dc gadijumaa iisina izeju]
> 
> optronus izmanto:
> visa veida komunikaacijai starp out stage uz barotaaju un atpakalj [dc, overload, u.t.t.] u.c. mezglos..
> nav nemaz tik maaaz :P


 Ehh, pareizi. iekš QSC USA aizsardzībā un vēl šur tur bija.
Kur optronus lieto, tā pat skaidrs.

----------


## kaspich

nu Tu zagnul..
10mS ir mezhoniigi ilgi! padomaa - Tu [pienjemsim] gribi noraidiit 4baitus [totaalo min], tas aiznjems pussekundi!
nerunaajot par to, ka baigi leni, bateriju tak izeediis tukshu 100X aatraak kaa vajadzeetu..
nez, peec manas saprashanas 10..20kbodi buutu pilniigi ok. 
un par algoritmu.

1. visam ir jaasaakas ar mark [garaaku impulsu par stopbitiem, u.c. lietaam]. ja taa nebuus - no citaam pultiim u.c. drazas viss juks praataa.
2.mark garums ir jaadetektee, tas bus 1.prastais identifikators/atskaite
3. ok, tmro var izmantot naakoshaa bita gaidiishanai, bet - tmro ir jaanostraadaa bita viduspunktaa [lai min ietekme buutu fronteem/signaala formas kropljojumiem]

pie 10kbodiem impulsu sekoshanas F buus ik peec 250 komandaam [F=10mhz] - daaaaudz, tur mieriigi var nolasiit, izkrist no irq, apstraadat 100hz, u.t.t.

----------


## next

Juus te no viena graavja otraa.
Visi nopeerkamie IR distances vadiibas uztveereeji ir orienteeti uz apmeeram 1ms bod intervaalu.
Nu tad pie taa arii vajag tureeties.
Ja aatruma nepietiek tad IRDA virzienaa jaaskataas.

----------


## kaspich

> Juus te no viena graavja otraa.
> Visi nopeerkamie IR distances vadiibas uztveereeji ir orienteeti uz apmeeram 1ms bod intervaalu.
> Nu tad pie taa arii vajag tureeties.
> Ja aatruma nepietiek tad IRDA virzienaa jaaskataas.


 prichom tur irda?
ok, var palikt pie 1kboda.
vnk visi shie IR ir konceptuaali tapinaati 30 gadus atpakalj, un lielaa meeraa kaut kaadas atpkaljsavietojamiibas [ar vecaakiem modeljiem] tik leeni arii palikushi.
ja 80.gadaa tas bija aktuaali [ar analogiem timeriem meerot mark, u.c. lietas], tad muusdienaas - apzinaati paleeninaat datu apmainju.. neredzu jeegu..
un kur nu veel kristies uz 5..8 baiti/sec..

----------


## habitbraker

KO sakaat par sitaadu prieks beztransformatora barosanas un zero detekteesanas sheemu?
 
Neuzsprāgs?  ::  Varbuut kaadu citu beztransformatora sheemu varat ieteikt? Interesee kompaktums tieši

----------


## next

Kautkas dikti paargudrs tev sanaak.
Rekur shitaa bija taisiiti taimeri kas daudzdziivoklju maaju kaapnjutelpaas staav.

----------


## kaspich

> KO sakaat par sitaadu prieks beztransformatora barosanas un zero detekteesanas sheemu?
>  
> Neuzsprāgs?  Varbuut kaadu citu beztransformatora sheemu varat ieteikt? Interesee kompaktums tieši


 
dazhas elementaaras lietas:
1. nahrena Tev tilts pie 230?
to 40K pretestiibu, kas dzeesh spani, liec PIRMS tilta, pashaa saakuma. tad tilts un viss paareejais jau buus zemvoltiiga aplikaacija
2. tranim starp baazi un emiteru - kur pretestiiba? obligaati. un pat kaadu 3n3..10n kondensatoru [var starp baazi un kolektoru]
3. to elektorliitu ar kaartu mazaaku. nahrena Tev 20 sekundes vinju laadeet?  :: 

bet citaadi - ir ok.

labaak, protams, butu:

tranis pnp, kopemitera sleegumaa.
tad:
1. zero detect preciizi nostraadaatu, kad momentaanaa U veertiiba ir zem Uzener;
2. tranis butu atveerts tikai zero cross laikaa, kas buutiski samazinaatu videejo pateerinju [vareesi palielinaat Iout - piem., liidz 5..10mA prieksh optrona].

----------


## kaspich

> Kautkas dikti paargudrs tev sanaak.
> Rekur shitaa bija taisiiti taimeri kas daudzdziivoklju maaju kaapnjutelpaas staav.


 nu, bet Tu tak kaut ko pavisam citu iemeti. Tu iemeti sheemu, kur cau C tiek barots PIC.
seedies, 2.

----------


## next

> nu, bet Tu tak kaut ko pavisam citu iemeti. Tu iemeti sheemu, kur cau C tiek barots PIC.
> seedies, 2.


 Nu ieliec C vietaa R.
Vinjam zerodetektoru vajadzeeja un to bez baroshanas sheemas atsevishji ziimeet nevar.

----------


## kaspich

pag, kur ielikt? man nesanaak..

un kaapeec gan zero detekts nevar buut atseviskji???

----------


## next

> un kaapeec gan zero detekts nevar buut atseviskji???


 Vinjam jau to detektoru prieksh PIC arii vajag.

----------


## kaspich

pag, Tu te nelavieree! raadi, kur/ko Tevis piedavaatajaa sheemaa dariit.

jaa, un tieshi taapeec vinja gadiijumaa zero krosu viskorektak ir taiis atseviskji baroshanas, ar optronu atsaistot no 230.

----------


## next

Nu paskaties dazhas lapas atpakalj - jautaajuma autors taisa dimmeri.
Aiz mana dziivoklja durviim - kaapnjutelpaa ir taimeris kas izsleedz apgaismojumu (iisteniibaa tas ir dimmeris ar taimera funkciju).
Un vinja baroshanas un nulles detektora sheemtehnika ir tieshi taada kaa manaa ziimeejumaa.
Kaadi nafig optroni taadaa sheemaa?!!

----------


## kaspich

mans vienkaarshais secinaajums - teemu Tu nerubii, iedziljinaaties nespeej. bet, esi gatavs citus maaciit, iekopeejot pasham neizprotamas sheemas..  :: 

taatad, apdaavinatajiem:
1. Tev kaapnju telpaa ir taimeris, kuram zero cross tiek izmantots tikai iesleegshanaas briidii, bet vinjsh taisa faazu regulatoru;
2. kaapeec oprtonu? kaut vai taapeec, lai maajaas programmeejot, buutu galvaniska atsaite.

----------


## next

> 1. Tev kaapnju telpaa ir taimeris, kuram zero cross tiek izmantots tikai iesleegshanaas briidii, bet vinjsh taisa faazu regulatoru;


 Kaapeec striidies par lietaam ko neesi redzeejis - dimmeri vinjsh teelo pirms izsleegshanas lai atgaadinaatu ljauzhiem kas tur varbuut atrodas ka taimauts beidzas un gaisma dziest.

Galvanisku atsaisti katraa dimmerii un sleedzii, nu iesaki veel ko orgjinaalu.

----------


## kaspich

cilveek, bl*ac, Tu nemani atskjiriibu starp 
1. dimmeri
2. taimeri, kurh 1..2sec laikaa pakaapeniski izdzeesh spuldzi????

nee?
Tu taa arii NEKO nespeej pateikt/ieteikt par sevis ielikto shemas variantu, tikai tukshi kaut ko postee..

jeeb%al.
1. serijveidaa optronu var nelikt
2. jaa, un? kaapeec nevareetu buut 10 centus veerts optrons? kur probleema???

----------


## next

> cilveek, bl*ac, Tu nemani atskjiriibu starp 
> 1. dimmeri
> 2. taimeri, kurh 1..2sec laikaa pakaapeniski izdzeesh spuldzi????


 Nu pastaasti, kur tad ir taa milzu atshkjiriiba.

----------


## kaspich

atskjiriiba ir ljoti elementaara/buutiska.

dimeeris ir paredzeets darbam daljeejas jaudas rezhiimaa - tur buutiska ir gan iisterminja, gan ilgterminja stabilitaate/precizitaate.
taadam timerim, savukaart, faazu reguleeshana ir absoluuti simboliska - ne tur ilgterminja stabilitaate, ne precizitaade. da pat taa reguleeshana - kak bi kak.

vecit, ja Tev jaaskaidro shaadas lietas..

----------


## next

> atskjiriiba ir ljoti elementaara/buutiska.
> 
> dimeeris ir paredzeets darbam daljeejas jaudas rezhiimaa - tur buutiska ir gan iisterminja, gan ilgterminja stabilitaate/precizitaate.
> taadam timerim, savukaart, faazu reguleeshana ir absoluuti simboliska - ne tur ilgterminja stabilitaate, ne precizitaade. da pat taa reguleeshana - kak bi kak.


 Tagad aizej uz elektropiederumu bodi, salasi visus verkjus kas saucas dimmeris un nodemonstree kaa tie atbilst tevis dotajam aprakstam.

----------


## kaspich

> atskjiriiba ir ljoti elementaara/buutiska.
> 
> dimeeris ir paredzeets darbam daljeejas jaudas rezhiimaa - tur buutiska ir gan iisterminja, gan ilgterminja stabilitaate/precizitaate.
> taadam timerim, savukaart, faazu reguleeshana ir absoluuti simboliska - ne tur ilgterminja stabilitaate, ne precizitaade. da pat taa reguleeshana - kak bi kak.
> 
> 
>  Tagad aizej uz elektropiederumu bodi, salasi visus verkjus kas saucas dimmeris un nodemonstree kaa tie atbilst tevis dotajam aprakstam.


 ja Tevi tas interesee, ej TU.. ko Tu te saac komandeet?

cilveeks taisa dimmeri ar IR vadiibu. Tu ietiekt neko nevari, nerubii pamatlietas, bet te veel mani uz veikalu suuti..  ::   ::   :: 
tak katram no malas ir skaidrs, ka Tu te ne pa teemu ko chiepsti.. atziishana - jaa, neko nerubiiju, pazuudu, buutu korektaakais manevrs  :: 

p.s. atljaushos apgalvot, ka taadas IR vadamas gaismas sisteemas maksa realu kapostu [4kanaalu paari par 200 LVL, vienu taadu atjaunoju peec profu piesleeguma], un nemeetajaas katraa elektroveikalaa..

tajaa, ko atjaunoju:
normaals 0 detect [vesels mezgls ar opto atsaisti], opto atsaiste katram simistoram, vadiiba pa IR un ar sledziem, u.t.t.
b&o taadas ir, kaut kaadam elenberg, ja nekljuudos..

----------


## next

> Tu ietiekt neko nevari, nerubii pamatlietas, bet te veel mani uz veikalu suuti..   
> tak katram no malas ir skaidrs, ka Tu te ne pa teemu ko chiepsti.. atziishana - jaa, neko nerubiiju, pazuudu, buutu korektaakais manevrs


 Taatad atziisti ka tavs formuleejums ir pasha galvaa iedomaats, neviena cita neatziits un argumentu vietaa tuksha lamaashanaas?

----------


## kaspich

> Tu ietiekt neko nevari, nerubii pamatlietas, bet te veel mani uz veikalu suuti..   
> tak katram no malas ir skaidrs, ka Tu te ne pa teemu ko chiepsti.. atziishana - jaa, neko nerubiiju, pazuudu, buutu korektaakais manevrs 
> 
> 
>  Taatad atziisti ka tavs formuleejums ir pasha galvaa iedomaats, neviena cita neatziits un argumentu vietaa tuksha lamaashanaas?


 jaa, paziistu es shaadus tukshdirseejus. jo mazaak sajeedz, jo vairaak saak demagogjeet.. epis2..  ::

----------


## next

> jaa, paziistu es shaadus tukshdirseejus. jo mazaak sajeedz, jo vairaak saak demagogjeet.. epis2..


 Atkaartota piekrishana ka argumentu nav?

----------


## next

A varbuut pagaidiisim kad jautaajuma autors pastaastiis kaads dimmeris un kaadai vajadziibai vajadziigs?

----------


## kaspich

> jaa, paziistu es shaadus tukshdirseejus. jo mazaak sajeedz, jo vairaak saak demagogjeet.. epis2.. 
> 
> 
>  Atkaartota piekrishana ka argumentu nav?


 
tak atspaardies, nejeega. iemacies elementaaras lietas, internetu ieskaitot. Tu neesi ne redzeejis shadus smart home risinaajumus, ne vispar rubii, par ko ir runa. ne Tu saproti, ka stradaa pasha ievietotaas sheemas fragments, ne ar ko dimer no timera atskjiras. seedi malinjaa, zb pionieri/lohi..

----------


## next

> tak atspaardies, nejeega. iemacies elementaaras lietas, internetu ieskaitot. Tu neesi ne redzeejis shadus smart home risinaajumus, ne vispar rubii, par ko ir runa. ne Tu saproti, ka stradaa pasha ievietotaas sheemas fragments, ne ar ko dimer no timera atskjiras. seedi malinjaa, zb pionieri/lohi..


 Atkaartota piekrishana ka argumentu nav?

----------


## JDat

Next, izsaukšu uguni arī uz sevi.  :: 
KAs td ir Dimmer?
Jā, es, tā pat kā EPIS, arī lasu wikipedia. Tur stāv rakstīts:



> Dimmers are devices used to vary the brightness of a light. By decreasing or increasing the RMS voltage and hence the mean power to the lamp it is possible to vary the intensity of the light output.


 Domāju ka te ir pietiekoši gudri cilvēki un nav speciāli jātulko latviski.

Tātad: kāda H starpība, kā notiek gaismas spiltuma mainīšana. Ar simistoru vai tranzisoru u+ PWM vai no hibrīdā turboreaktīvā raķešdzinēja. Galvenais ka aparāts ilgi strādā, nenodeg, un netaisa problēmas citiem. Ko jūs te strīdaties bezjēgā? To var ari iekš PM darīt.

Bez tam: habitbaker nez ko un nez kā ķīmiķo. Palasi topika pirmās lapas, kā tur gāja ar IRQ. Nedomāju ka šamajam vajag kaut ko sarežģītu.

Savukārt next, ņem vērā ka habitbaker eksperimentē, tātad drošībai vajag optronu (vismaz pagaidām).

----------


## JDat

Next, izsaukšu uguni arī uz sevi.  :: 
KAs td ir Dimmer?
Jā, es, tā pat kā EPIS, arī lasu wikipedia. Tur stāv rakstīts:



> Dimmers are devices used to vary the brightness of a light. By decreasing or increasing the RMS voltage and hence the mean power to the lamp it is possible to vary the intensity of the light output.


 Domāju ka te ir pietiekoši gudri cilvēki un nav speciāli jātulko latviski.

Tātad: kāda H starpība, kā notiek gaismas spiltuma mainīšana. Ar simistoru vai tranzisoru u+ PWM vai no hibrīdā turboreaktīvā raķešdzinēja. Galvenais ka aparāts ilgi strādā, nenodeg, un netaisa problēmas citiem. Ko jūs te strīdaties bezjēgā? To var ari iekš PM darīt.

Bez tam: habitbaker nez ko un nez kā ķīmiķo. Palasi topika pirmās lapas, kā tur gāja ar IRQ. Nedomāju ka šamajam vajag kaut ko sarežģītu.

Savukārt next, ņem vērā ka habitbaker eksperimentē, tātad drošībai vajag optronu (vismaz pagaidām).

----------


## next

> Next, izsaukšu uguni arī uz sevi. 
> KAs td ir Dimmer?
> 
> Bez tam: habitbaker nez ko un nez kā ķīmiķo. Nedomāju ka šamajam vajag kaut ko sarežģītu.
> 
> Savukārt next, ņem vērā ka habitbaker eksperimentē, tātad drošībai vajag optronu (vismaz pagaidām).


 Droshiibai taisiishanas procesam vajag atdalosho transformatoru, un nekaa citaadi to nedriikst dariit.
Ko vispaarpienjemts saukt par dimmeri vislabaak zina guglis.
Luugtum iepaziities:
http://www.google.lv/images?hl=ru&sourc ... =&gs_rfai=

----------


## kaspich

mjaaa.. eu, a nav kas veel prastaaks par wiki linka noraadiishanu?  :: 

es runaaju par dazhaam elementaaraam lietaam:
1. cilveeks ieliek kaut kaadas sheemas fragmentu, nesaprotot, ne kaa taa straadaa, ne kaads ir taas pielietoshanas meerkjis
2. par citu [sakariigaaku] shemu nevienam nav nekaadu komentaaru - aciimredzot, par sarezgjitu [4 diodes, 1 tranis, paaris pretestiibas]
3. sarezgjits/vienkaarsh.. tur jau taa lieta - labs zero detect buutiski atvieglo softisko realizaaciju
4. par daudzaam probleemaam [atkaartoti apartraukumi, zero drift, u.c.] jau mineeju iepriekhs - arii, laikam, paaraak sarezgjiti bija..

klau, 2 teemaas es aicinu uz diskusiju [viena - par stabilitroniem ampa sheemaa, otra - par 2 tranju simetrisku multvibratoru] - abaas klusums. paaraak sarezgjiti??
jaa, bet par wiki linkie diskusija spreegaa  ::

----------


## JDat

Ko var pateikt.

Labi ka mums vienīgais gudrais cilvēks Latvijā ir kaspich. Ko mēs, idioti, bez tevis darītu?

----------


## kaspich

informaacijai - dimmeri meedz buut dazhaadi.
sakot no paaris elementiem+simistors, un beidzot ar:

piem., NA kompaanija izstradaaja dimmer, kur DSPIC33 series kontroleeja 3 faauz ienaakosho spani - simuleeja sine, formeeja zero detect,
atseviskjs procis vada vai nu simistorus [parastaa versijaa] vai arii sinhronos tiltus uz mosfet un pwm modulatorus [augstfrekvences versijaas].
ieraugot taadus aparaatus, domaaju, juus paarskatiitu savu sapratni par dimmeriem.

mani gan nedaudz skumdina, ka it kaa nozares entuziasti aicina/noraada/agjitee par max vienkaarshiem/suudiigiem/nefunkcionaaliem vakardienas suudiem.. tad mok darbojieties nozarees, kuraas neesiet luuzeri?  ::

----------


## kaspich

> Ko var pateikt.
> 
> Labi ka mums vienīgais gudrais cilvēks Latvijā ir kaspich. Ko mēs, idioti, bez tevis darītu?


 a kas? Tu taa kaa apshaubi, ka esmu citaa plauktinjaa?
kremt? sore, nevaru paliidzeet.
cik varu, paliidzu, ne reizes neesmu attiecis padomu [haljavno]  ::  ne?
Tu pat taa iisti paldies neesi pateicis, nerunaajot par kaadu apaljo..

kauns taa kaa nav bisku, a, remontjnik?  ::

----------


## JDat

kaspich, uzliec speelchekeri. pārāk daudz kļūdu aiz pārrakstīšanās, kā rezultātā reizēm nevar saprast ko tu raksti.

man rodas iespaids, ka kaspicham ir zvaigžņu slimība. nē nu labi, tu tiešām daudz zini, bet... nez kāpēc tu uzreiz apliec visus kas domā savādāk. Itkā visiem uzreiz būtu jādomā un jādara tikai pa tavam. Tu esi sūdīgs gejs (nez, spriežu pēc taviem tekstiem), bet komunists no tevis sanāktu (arī spriežu pēc taviem tekstiem).  :: 

Sorry, ne kā personīga, bet man šovakar panesās piekasīšanas...

----------


## next

> es runaaju par dazhaam elementaaraam lietaam:
> 1. cilveeks ieliek kaut kaadas sheemas fragmentu, nesaprotot, ne kaa taa straadaa, ne kaads ir taas pielietoshanas meerkjis


 Nu ko tu tur nesaproti?
Nu pajautaa beidzot.
Manaa izpratnee tur viss tik vienkaarshi ka komentaarus nevajag.

----------


## JDat

> es runaaju par dazhaam elementaaraam lietaam:
> 1. cilveeks ieliek kaut kaadas sheemas fragmentu, nesaprotot, ne kaa taa straadaa, ne kaads ir taas pielietoshanas meerkjis
> 
> 
>  Nu ko tu tur nesaproti?
> Nu pajautaa beidzot.
> Manaa izpratnee tur viss tik vienkaarshi ka komentaarus nevajag.


 Labāk pats, paskaidro, jo katram ir sava izpratne.  ::

----------


## kaspich

> kaspich, uzliec speelchekeri. pārāk daudz kļūdu aiz pārrakstīšanās, kā rezultātā reizēm nevar saprast ko tu raksti.
> 
> man rodas iespaids, ka kaspicham ir zvaigžņu slimība. nē nu labi, tu tiešām daudz zini, bet... nez kāpēc tu uzreiz apliec visus kas domā savādāk. Itkā visiem uzreiz būtu jādomā un jādara tikai pa tavam. Tu esi sūdīgs gejs (nez, spriežu pēc taviem tekstiem), bet komunists no tevis sanāktu (arī spriežu pēc taviem tekstiem). 
> 
> Sorry, ne kā personīga, bet man šovakar panesās piekasīšanas...


 redz, vissuudiigaakais, ka nav jau taa 'domaa savaadaak..'.  kur tad domaa savaadaak? domaa - nejeedzot.
nav jau konstruktiivas diskusijas [vismaz shajaa temaa]. viena sheema, kur autors pats nrubi, un VISS.
viens wiki links, viens google links..  :: 

da blj%^&, spell checkers jau visus vaardus sarkanus pasviitro - bezceriigi..  :: 

p.s. par zvaigznju slimiibu.. zini, man reizeem skjiet - tieshi preteeji.. kad palasu, kaadi te kingi/profi [saakot ar rakjeshu dzineejiem, gan visu ampu buuveeshanas diletantu bio paarzinaataajiem].. :P

----------


## kaspich

> es runaaju par dazhaam elementaaraam lietaam:
> 1. cilveeks ieliek kaut kaadas sheemas fragmentu, nesaprotot, ne kaa taa straadaa, ne kaads ir taas pielietoshanas meerkjis
> 
> 
>  Nu ko tu tur nesaproti?
> Nu pajautaa beidzot.
> Manaa izpratnee tur viss tik vienkaarshi ka komentaarus nevajag.
> 
> 
>  Labāk pats, paskaidro, jo katram ir sava izpratne.


 mani interesee, kaadu c uz kadu r mainiiti [Tu ieteici].
mani interesee, kaa Tevis ieliktajaa sheemaa ir realizeets zero crossing.
mani interesee, kas/ar ko ir labaaks/sliktaaks shai sheemai, ko ielika hvz kas [es piekorigjeeju].
mani tas viss interesee  ::

----------


## JDat

> da blj%^&, spell checkers jau visus vaardus sarkanus pasviitro - bezceriigi..


 Tas tāpēc ka neraksti latviski. Man arī tā bija. BEEF, nolamāja un es sāku latviski rakstīt (bez translīta). Ko lai saka, progress. Vismaz šajā ziņā.

[quote="kaspich"]a kas? Tu taa kaa apshaubi, ka esmu citaa plauktinjaa?
kremt? sore, nevaru paliidzeet.
[/qoute]

Nē, nekremt, bet gan priecē ka ir gudrs cilvēks. Kremt pa visam kas cits. Tā metodē kā māci... Nu labi, tā tava darīšana, tavs raksturs... Enīvei. Labs ir, poo. Līdīšu atpakaļ no kurienes izlīdu.

----------


## kaspich

> da blj%^&, spell checkers jau visus vaardus sarkanus pasviitro - bezceriigi.. 
> 
> 
> 
> 
> 
>  Tas tāpēc ka neraksti latviski. Man arī tā bija. BEEF, nolamāja un es sāku latviski rakstīt (bez translīta). Ko lai saka, progress. Vismaz šajā ziņā.
> 
> 
> ...


 sore, es zinu, ka neesmu miiljaakais/iecietiigaakais. zini, kaapeec?
taapec, ka es saprotu taa- shis ir mans/Tavs/vinja valjasprieks, aizraushanaas, passion. 
ja shajaa [vistuvaakajaa] jomaa attiesme ir - lai tikai kaut kaa straadaa/nospiesta sheemele/kautkaskautkaa sakjibinaats/nosperts, tad - jaa, es nesolu visus slaveet. man latinja ir augsta pret pasha dariito, un ne galigi zema pret citiem. galu galaa, Tu tachu arii pretendee uz jeedozsha alja elektronikja statusu. tad nepieprasi, lai visi priecajas, ja diodi no pretestibas atskjir..  ::

----------


## JDat

pretendēt ta es nepretendēju. protams gribas zināt vairāk, darīt labāk, atrast failuri ātrāk un izcirst problēmai sakni nevis cīnīties ar sekām. tikai viena lieta ir : pateikt, a kapēc nevarētu darīt tā vai šita, jo manuprāt tas ir labāk sekojošu iemeslu dēl, bet gan tā vietā pasaka: ja tu dari tā, nevis šitā, tad esi stulbenis. Tu neesi vienīgais kam ir problēmas ar komunikāciju. Te tādu ir daudz. Tai skaitā, gan es, gan next.

----------


## kaspich

> pretendēt ta es nepretendēju. protams gribas zināt vairāk, darīt labāk, atrast failuri ātrāk un izcirst problēmai sakni nevis cīnīties ar sekām. tikai viena lieta ir : pateikt, a kapēc nevarētu darīt tā vai šita, jo manuprāt tas ir labāk sekojošu iemeslu dēl, bet gan tā vietā pasaka: ja tu dari tā, nevis šitā, tad esi stulbenis. Tu neesi vienīgais kam ir problēmas ar komunikāciju. Te tādu ir daudz. Tai skaitā, gan es, gan next.


 nu, redz, man globaali poh netaa rakstiitais. nekad neesmu uztveeris to personiski  :: 
un mieriigi varu ienjirgt arii pats par sevi - nav probleemu :P

sore, ja es saku kaa Tavaa piemeeraa - tas noziimee - es uzskatu [subjektiivs viedoklis], ka tas ir tik elementaari, ka bija jaazin/jaasaprot.

eu, next, kaaruminj, kur Tu pazudi?  ::  kur rasklads?

----------


## next

> mani interesee, kaadu c uz kadu r mainiiti [Tu ieteici].
> mani interesee, kaa Tevis ieliktajaa sheemaa ir realizeets zero crossing.
> mani interesee, kas/ar ko ir labaaks/sliktaaks shai sheemai, ko ielika hvz kas [es piekorigjeeju].


 Tu netici ka balasta kondesatora vietaa var ielikt ekvivalentu reziikli?
Tu netici ka rezistiivais dallitaajs kopaa aizsardziibas diodeem no sinusa uztaisiis meandru ko var palaist uz int?
(Variantaa ar pic12c508 (bez paartraukumu sisteemas) faazes dziters bija 4 reizes lielaaks, bet dimmeris straadaaja pavisam labi.)
Labas lietas ir vienkaarshas lietas, nav veerts sarezhgjiit sheemas tur kur tas nav vajadziigs.
Kaa teica onkulis Meerfijs - viss kas var sabojaaties sabojaasies, viss kas nevar sabojaaties arii sabojaasies, vieniigaa droshaa detalja ir taa kuras nav.

----------


## kaspich

> mani interesee, kaadu c uz kadu r mainiiti [Tu ieteici].
> mani interesee, kaa Tevis ieliktajaa sheemaa ir realizeets zero crossing.
> mani interesee, kas/ar ko ir labaaks/sliktaaks shai sheemai, ko ielika hvz kas [es piekorigjeeju].
> 
> 
>  Tu netici ka balasta kondesatora vietaa var ielikt ekvivalentu reziikli?
> Tu netici ka rezistiivais dallitaajs kopaa aizsardziibas diodeem no sinusa uztaisiis meandru ko var palaist uz int?
> (Variantaa ar pic12c508 (bez paartraukumu sisteemas) faazes dziters bija 4 reizes lielaaks, bet dimmeris straadaaja pavisam labi.)
> Labas lietas ir vienkaarshas lietas, nav veerts sarezhgjiit sheemas tur kur tas nav vajadziigs.
> Kaa teica onkulis Meerfijs - viss kas var sabojaaties sabojaasies, viss kas nevar sabojaaties arii sabojaasies, vieniigaa droshaa detalja ir taa kuras nav.


 izklausaas profesionaali  ::   ::   ::

----------


## JDat

> izklausaas profesionaali


 Vai vārds *profesionāli* nebija domāts pēdiņās?

----------


## kaspich

> izklausaas profesionaali   
> 
> 
>  Vai vārds *profesionāli* nebija domāts pēdiņās?


 uzmineeji :P

1. balasta C ar R nav nekaads sakars. shajaa sheeminjaa zero detect notiek caur 1m/100k daliitaaju
2. taads daliitaajs noziimee, ka zero detect nostraadaas pie aptuveni 25V, piedevaam, balstiities uz internal diodeem nav korekti;
3. shaads risinaajums nesanjem info par abu pusperiodu saakumu. ibo, epec saakuma ir jaadetektee zero cross, jo perioda beigas sachakares pats regulators un citi faazu vadiibas brinumi tiklaa..
4. augstomiigas kjeedes - fail shaadaa aplikaacijaa


beet, par ko mees te.. next - juus ar epi vienaa chupinjaa  ::

----------


## JDat

par 2. norādi 100 % piekrītu, bet par salīdzinājumu ar epi gan nē.

----------


## next

> uzmineeji :P


 Smiekliigaakais ka taa patieshaam nav mana sheemtehnika (es tur piedaliijos tikai kaa programmists).
Un tie verkji straadaa daudzus gadus desmitiem tuukstoshu eksemplaaros.

PS. Microchip Application Notes iesaku lasiit.

----------


## kaspich

> uzmineeji :P
> 
> 
>  Smiekliigaakais ka taa patieshaam nav mana sheemtehnika (es tur piedaliijos tikai kaa programmists).
> Un tie verkji straadaa daudzus gadus desmitiem tuukstoshu eksemplaaros.
> 
> PS. Microchip Application Notes iesaku lasiit.


 vot, ar to ieteikshnu buutu pieraavies  :: 

iesaku Tev [individuaali] lasiit visu, ko veelies :P

p.s. cilveek, nu nefonjii Tu pasaakumu. pat tik daudz, lai diskusijaa piedaliitos..
 :: 
p.p.s jaa, ja tas ir timers ar 2sec smuku offtime, tad taada sheeminja cauri ies, 2 vakarus pa paaris h pie kompja, un arii softs buus gatavs  ::

----------


## Vikings

Bļāviens, nesaprotu ko jūs te pisaties. next ievietotajā shēmā zerocrossings IMHO tiek noteikts ar R dalītāju, kas sastāv no 1,5M un 200K. Protams, ne tur kāda filtrēšana ne ieejas aizsardzība (kas uz godavārda strādā uz PICa iebūvētajām diodēm), bet ja vajag tikai lēnām nodzēst gaismu - pilnīgi vajadzētu pietikt. Tiesa gan, tādu shēmu taisīt tūkstošos eksemplāru gan IMHO ir biš pārdroši.
Pats es kaut kad taisīju tādu shēmu - tiltiņš, rezistors un optrons. Izejā sanāk impulsiņš, kuru programmiski apstrādājot var iegūt diezgan precīzu perioda laiku. Impulsa viduspunkts sanāk zerocrossinga brīdis.
Par beztransformatora barošanu neizteikšos, tur gan es neko īsti nejēdzu.

----------


## kaspich

> Bļāviens, nesaprotu ko jūs te pisaties. next ievietotajā shēmā zerocrossings IMHO tiek noteikts ar R dalītāju, kas sastāv no 1,5M un 200K. Protams, ne tur kāda filtrēšana ne ieejas aizsardzība (kas uz godavārda strādā uz PICa iebūvētajām diodēm), bet ja vajag tikai lēnām nodzēst gaismu - pilnīgi vajadzētu pietikt. Tiesa gan, tādu shēmu taisīt tūkstošos eksemplāru gan IMHO ir biš pārdroši.
> Pats es kaut kad taisīju tādu shēmu - tiltiņš, rezistors un optrons. Izejā sanāk impulsiņš, kuru programmiski apstrādājot var iegūt diezgan precīzu perioda laiku. Impulsa viduspunkts sanāk zerocrossinga brīdis.
> Par beztransformatora barošanu neizteikšos, tur gan es neko īsti nejēdzu.


 
nu, tieshi taa! bet, interesantaakais, ka next [kaut saka, ka esot softu rakstijis], pats nemaz NEZINAAJA/NESAPRATA, kaa/kur tas zero rossings tiek veidots  ::   ::   ::

----------


## habitbraker

Normaala pleesanaas sanaakusi jums  ::  
Ko es te taisu? Nu lapas spilgtuma regulatoru ar IR vaiibu. IR pultij 2 pogas - ar vienu pa 1ms soliem aizkave no ZC signaala palielinaas(spilgtums samazinaasies ar otru otrādi. Varbuut kaada poga buus prieks galējām vērtībām - off un full on
Pamata kods jau ir - izmantojot manis paša IR protokolu  ::  Dziivee strādā uz breadboarda vismaz IR daļa. Ja interesee varu paraadiit  :: 

Paldies kaspich par ieteikumiem - šādi buutu labaak? Kur man iisti likt to rezistoru pirms tilta? Kaa V daliitāju vai kā?


Jaa sitais viss protams ir eksperimenteesana ar domu kautko iemaaciities un iekaarta man arii buutu noderiiga   ::

----------


## kaspich

R3 paarcel ieejas  kjeedee [PIRMS tilta], tur, kur tagad ir R3 - vnk uz iiso.
un stabilitronu - paraleeli elektroliitam  ::

----------


## habitbraker

Paldies. 
Labi peedeejais juataajums akariibaa ar sito. Taa kaa man es vinu izmantosu kaa barosanu PICam un Simistoram tad vajag kautkaadu straavu. R3 sanaak ka vismaz 10W jaanem. Un ja izmanto prosta zener diodi tad baigais riple uz vinu (kaadi 300ppmV). Tas daudz maina? Pieliku šādu volt regulatoru un riple samazinājās uz gandriiz 0uV
Varbuut baigu beigaas jaanem kautkaads siiks trafiņš...

----------


## kaspich

nu, es teiktu - zrja mocies. panjem kaadu 78L05 [taadi, laikam, bija mazjaudiigie, ar mazu pateeinju, TO92 korpusaa].

simistoram vnk jaataisa inteligjenta vadiiba - nevis visu laiku jatopii, bet gana iiss impulss jaformee uz geita.
piedevaam, taa kaa simistoram vajag vai nu mainiigas vai negatiivas polaritaates vadiibu, tad vienkaarshaakais vareetu buut: MOC3040 optrons+simistors.
pat, ja optronaa iepiljiisi 10mA, pie Q=20 videjais pateerinjsh 0.5mA.

to pirmo zeneru no 8v2 mieriigi vari nomainiit uz 12..15V, elektroliitu samazinaat [ripple tur - pofi dim, toties aatrak buus gatavs darbam]..

vien pusnepatiikama lieta - taa kaa baroshanas spriegums paraadaas leenaam, es liktu baroshanas kontroli: MCP100 vai ko liidziigu.
maksaa paardesmit santiimus, toties papildus droshiiba.

----------


## habitbraker

Paldies. Izmantosu 78l05 taatad.
Par to simistora impulsu. Šim optotriac http://www.argus.lv/pub/datasheets/MOC3x6x.pdf 6 lpp ir sheema - sanaak ka uz izvadu2 jaapadod '0' iisu briidi, ar noteiktu aizturi peez ZC un viss notiek? Vai arii  - kaa iisti darbojas tas optosimistors? Ko dara tas zero crossing circuit?

----------


## Vikings

Nē, šis Tev nederēs. Viņš ir paredzēts lai patērētāju ieslēgtu tieši zerocrossinga brīdī. Bet Tava doma ir slēgt patērētāju kaut kur pusperioda vidū. Ņem kaut ko no MOC302X sērijas, tie spēj ieslēgties arī pusperioda vidū.
Kā strādā? Ļoti vienkārši - gaismas diode aizvieto palaišanas strāvu. Attiecīgi caur izejas simistoru sāk plūst strāva, kas atver lielo jaudas simistoru.

----------


## habitbraker

Paldies. Arii tiesi skatiijos un un iedomaaajos par tiem MOC302X

----------


## next

> kaa tas var buut - Tu it kaa softu rakstiiji devaisam, bet pat aptuveni nesaproti, kaa tas darbojas?


 Atbildi lasiiji?
viewtopic.php?f=23&t=5192&st=0&sk=t&sd=a&start=135#p62439
Kas normaalam cilveekam tur vareetu buut neskaidrs?
Ka beztransformatora baroshanaa balasta kondensators var tikt aizvietots ar jaudiigu rezistoru.
Ka galvaniski neatsaistiitaas sheemaas perifeeriju jaasaskanjo ar baroshanu.
Par ko var visu izlasiit AN954 un AN958.
Lasiit maaki?

----------


## kaspich

prichom Tu man te noraadi uz kaut kaadiem AN?

es jautaaju - kaa Tu vareeji rakstit softu, ja pats pat nezini, kur/kaa tas zero krossings Tavaa paraugfragmentaa ir izveidots?
elektronika ir konreeta zianatne, Tu te nelavieree  ::

----------


## next

> prichom Tu man te noraadi uz kaut kaadiem AN?


 Tu esi debils?
OK, redz kur taa bilde veelreiz.
Vai ir shai teemaa kaads kas nesaprot kas tur ziimeets?

----------


## kaspich

nu, peec taadas sheemas man nav skaidrs kaa Tu apstraadaa to zero crossing, jo:
1. Tu vinjsu sanjem taa kaa bisku nobiidiitu
2. Tu redzi viena pusperioda beigas/otra saakumu..

pastasti nejeegam :P

----------


## next

> nu, peec taadas sheemas man nav skaidrs kaa Tu apstraadaa to zero crossing, jo:
> 1. Tu vinjsu sanjem taa kaa bisku nobiidiitu
> 2. Tu redzi viena pusperioda beigas/otra saakumu..


 Un kur tu redzi probleemu?
Cik daudz jaudas tiek zaudeets ja triaku iesleedz ar shaadu aizturi?
Cik gruuti izreekjinaat otra pusperioda saakumu ja zinaams kaadu precizitaati nodroshina INTRC un kaadaas robehzaas frekvenci uztur Latvenergo?

----------


## kaspich

> nu, peec taadas sheemas man nav skaidrs kaa Tu apstraadaa to zero crossing, jo:
> 1. Tu vinjsu sanjem taa kaa bisku nobiidiitu
> 2. Tu redzi viena pusperioda beigas/otra saakumu..
> 
> 
>  Un kur tu redzi probleemu?
> Cik daudz jaudas tiek zaudeets ja triaku iesleedz ar shaadu aizturi?
> Cik gruuti izreekjinaat otra pusperioda saakumu ja zinaams kaadu precizitaati nodroshina INTRC un kaadaas robehzaas frekvenci uztur Latvenergo?


 nu, skaidrs. pirmie solji. tikai, kaapeec Tu taa protestee, ka/kad citi meegjina taisiit kvalitatiivaak? :P

----------


## next

> nu, skaidrs. pirmie solji. tikai, kaapeec Tu taa protestee, ka/kad citi meegjina taisiit kvalitatiivaak? :P


 Tu vareetu pielikt 50Hz sinusoiidai parasti tiiklaa esoshos trauceejumus, nomodeleet to nullesdetektoru darbiibu un tad mees vareetu apspriest kas ir lietojams un par ko labaak aizmirst.

----------


## kaspich

> nu, skaidrs. pirmie solji. tikai, kaapeec Tu taa protestee, ka/kad citi meegjina taisiit kvalitatiivaak? :P
> 
> 
>  Tu vareetu pielikt 50Hz sinusoiidai parasti tiiklaa esoshos trauceejumus, nomodeleet to nullesdetektoru darbiibu un tad mees vareetu apspriest kas ir lietojams un par ko labaak aizmirst.


 nu, to vareeji dariit Tu, ja Tev tas ir aktuaali  ::  sore, bet.. Tev es neko pieraaadiit netaisos.. Tev bija uzdevums - kaapnju telpaa ljish bi straadatu..

p.s. nez gan, ko Tu tik elementaaraa mezglaa taisies modeleet?  ::   ::

----------


## next

> p.s. nez gan, ko Tu tik elementaaraa mezglaa taisies modeleet?


 Nav vienkaarshu lietu, ir tikai vienkaarshota pieeja.
Kaa tas naak ka visi jautaajumi ko uzdodu paliek neatbildeeti?

----------


## kaspich

> p.s. nez gan, ko Tu tik elementaaraa mezglaa taisies modeleet?  
> 
> 
>  Nav vienkaarshu lietu, ir tikai vienkaarshota pieeja.
> Kaa tas naak ka visi jautaajumi ko uzdodu paliek neatbildeeti?


 shajaa gadiijumaa - ir vienkaarshi nejeegas, kas elementaaraas situaacijaas izmanto simulatorus, kaut nejeedz pashus pamatus.
pag, ko tad es neatbildu?
ka var C balastaa ar r aizvietot? var, bet neredzu jeegu..
par to vienoto projekteehsnau? nu, vispaar kaut kaads dumjsh texts. principaa - visi jebkuras iekaartas mezgli ir japrojektee vienoti/saistiiti..
par modeleeshanu - ja Tev intereseetu/buutu aktuaali [un Tu butu gatavs kaa mani ieintereseet], par konkreeto lietu es Tev pastaastiitu 1000X vairak kaa simulators..
bija veel kaadi jautaajumi?

----------


## next

> par modeleeshanu - ja Tev intereseetu/buutu aktuaali [un Tu butu gatavs kaa mani ieintereseet], par konkreeto lietu es Tev pastaastiitu 1000X vairak kaa simulators..
> bija veel kaadi jautaajumi?


 Visi jautaajumi tredaa, visiem jautaajuma ziimes galaa.
Par modeleeshanu piekriitu - nafig vajag, uzziimee taapat ar roku ko iedomaajies esam nullesdetektora izejaa kad tur reaalu tiikla shpani piesleegs.
Tad apspriediisim.

----------


## kaspich

> par modeleeshanu - ja Tev intereseetu/buutu aktuaali [un Tu butu gatavs kaa mani ieintereseet], par konkreeto lietu es Tev pastaastiitu 1000X vairak kaa simulators..
> bija veel kaadi jautaajumi?
> 
> 
>  Visi jautaajumi tredaa, visiem jautaajuma ziimes galaa.
> Par modeleeshanu piekriitu - nafig vajag, uzziimee taapat ar roku ko iedomaajies esam nullesdetektora izejaa kad tur reaalu tiikla shpani piesleegs.
> Tad apspriediisim.


 klau, pionieri, kaapeec Tu domaa, ka man buutu interesanti 'apspriest' Tavus pirmos soljus shajaa jomaa?  :: 
piedod, es bisku citaa plauktinjaa [shajaa jomaa] darbojos  ::   ::   :: 

kas ir treds? :P

----------


## next

> klau, pionieri, kaapeec Tu domaa, ka man buutu interesanti 'apspriest' Tavus pirmos soljus shajaa jomaa? 
> piedod, es bisku citaa plauktinjaa [shajaa jomaa] darbojos


 OK, fikseejam:
Paarejot no tukshas dirshanas pie reaalaam lietaam oponents aizlaizhas.

----------


## kaspich

> klau, pionieri, kaapeec Tu domaa, ka man buutu interesanti 'apspriest' Tavus pirmos soljus shajaa jomaa? 
> piedod, es bisku citaa plauktinjaa [shajaa jomaa] darbojos   
> 
> 
>  OK, fikseejam:
> Paarejot no tukshas dirshanas pie reaalaam lietaam oponents aizlaizhas.


 check PM

----------


## next

> check PM


 Atklaatiibaa pateikt nevari?
PM nelasu.

----------


## JDat

> Atklaatiibaa pateikt nevari?
> PM nelasu.


 To ka next PM nelasa, es arī vienreiz izjutu, bet nu labi.   ::

----------


## kaspich

> check PM
> 
> 
>  Atklaatiibaa pateikt nevari?
> PM nelasu.


 jptm..

tas ar ko es varu palepoties:
ar faazu reguleeshanu -pie Imax = 150A mieriigi dabuuta iisteminja I stabilitaate 50mA [ilgterminja - veel preciizaaka], izieshanas laiks 3..6mS, pie pretiigas slodzes [Uint; Rint=0.1ohm]
Umax 400V, Umin=0V, precizitaate [iisterminja] 0.1V..

jaa, bet vari pamaciit par zero crossingu  ::

----------


## next

> tas ar ko es varu palepoties:
> ar faazu reguleeshanu -pie Imax = 150A mieriigi dabuuta iisteminja I stabilitaate 50mA [ilgterminja - veel preciizaaka], izieshanas laiks 3..6mS, pie pretiigas slodzes [Uint; Rint=0.1ohm]
> Umax 400V, Umin=0V, precizitaate [iisterminja] 0.1V..


 Skaisti, tikai kaa tas saistaas ar teemu?
Pajautaa habitbraker vai tas vinju interesee.

----------


## kaspich

> tas ar ko es varu palepoties:
> ar faazu reguleeshanu -pie Imax = 150A mieriigi dabuuta iisteminja I stabilitaate 50mA [ilgterminja - veel preciizaaka], izieshanas laiks 3..6mS, pie pretiigas slodzes [Uint; Rint=0.1ohm]
> Umax 400V, Umin=0V, precizitaate [iisterminja] 0.1V..
> 
> 
>  Skaisti, tikai kaa tas saistaas ar teemu?
> Pajautaa habitbraker vai tas vinju interesee.


 saistaas ljoti elementaari - nemeegjini meeriities  ::  nemegjini man staastiit, kad jaasleedz simulators, kad pimpelators, un kaa pareizaak buuveet zero crossingu :P

----------


## next

> saistaas ljoti elementaari - nemeegjini meeriities  nemegjini man staastiit, kad jaasleedz simulators, kad pimpelators, un kaa pareizaak buuveet zero crossingu :P


 Fikseejam:
Argumentu vietaa oponentam tikai lieliiba ar savu krutumu un necenzeeta leksika.

----------


## kaspich

> saistaas ljoti elementaari - nemeegjini meeriities  nemegjini man staastiit, kad jaasleedz simulators, kad pimpelators, un kaa pareizaak buuveet zero crossingu :P
> 
> 
>  Fikseejam:
> Argumentu vietaa oponentam tikai lieliiba ar savu krutumu un necenzeeta leksika.


 nee, es nesaprotu/neredzu tos jautaajumus/argumentus. apkopo, luudzu, uzdod, centiisos atbildeet.
ar to fikseeshanu Tu mani reaali iebiedee!!!!!!!

----------


## next

> nee, es nesaprotu/neredzu tos jautaajumus/argumentus. apkopo, luudzu, uzdod, centiisos atbildeet.
> ar to fikseeshanu Tu mani reaali iebiedee!!!!!!!


 Oponent slivajet.
Nu i ladno.

----------


## JDat

nobeidzot kasīšanos par zero crossing...

Kaspich, pastāsti sīkāk par varoņdarbu ar PIC16F84 un DMX. Nē, nē, kodus nevajag.
Vajag kaut ko līdzīgu darba uzdevumam (LCD menu saraksts, kāda perifērija utt). Gribu palauzīt smadzenes, labprātāk lauzu smadzenes risinot šitādus uzdevumus, nevis pētot pastiprinātāju shēmas.

Tas nav domāts kā kašķis, jo mani vienmēr interesē izspiest visu sulu no MCU ar efektīvas programmēšanas palīdzību. Kā piemēram šitais varoņdarbs ar PIC16F84 un video: http://www.rickard.gunee.com/project.../pic/howto.php

----------


## kaspich

mazohists Tu esi  :: 
te jau peec psihologa prasaas// :P
ok, ja Tev riit nebuus pazudusi veelme/interese, ieskaneeshu sheemas - tad ari buus konkreetaak ar to/kas/kaa [tajaa piemeeraa] jaadara..

----------


## JDat

te jau veselam baram no forumiešiem prasās uz psiheni. vari ieskenēt, ja nav grūti un komercnoslēpums. līdz šim sapratu ka tas ir kaut kāds DMX gaismu agregāts ar soļa motoru, LCD un vēl kaut ko. pamatsāle uztvert un apstrādāt DMX. Ja 10 MHz kristāls... Tad uz katru DMX bitu (250 kbit/s) sanāk 10 "īsās" procesora komandas. ar to vien pietiek lai padomātu. sevišķi ja par DMX zināma tikai teorija un praksē ne kas nav darīts. Interesanti taču...

Kas attiecas uz elektronikas neiznāšanu... Ja palasa pub datu bāzes domu biedrus, tad te nemaz nav tik ļauni. Tur gan iet jautri un būtu ko lamāties.  ::

----------


## kaspich

> te jau veselam baram no forumiešiem prasās uz psiheni. vari ieskenēt, ja nav grūti un komercnoslēpums. līdz šim sapratu ka tas ir kaut kāds DMX gaismu agregāts ar soļa motoru, LCD un vēl kaut ko. pamatsāle uztvert un apstrādāt DMX. Ja 10 MHz kristāls... Tad uz katru DMX bitu (250 kbit/s) sanāk 10 "īsās" procesora komandas. ar to vien pietiek lai padomātu. sevišķi ja par DMX zināma tikai teorija un praksē ne kas nav darīts. Interesanti taču...


 nee, toch nav nosleepums  :: 
tagad visi paleenaam paariet uz LED PAR analogiem, scrolleri vairs nav aktuaali.

taatad, pribors, pamatfunkcijas:
1. ar solju dzineeju uz rulljiem paartin daudzkraasu kraasu filtrus PAR64
2. ar faazu metodi regulee spilgtumu lampai.

1. funkcijai:
a) max aatrums - 15apg./sec [pie tam, ka jaagroza 2 alumiinija barabani+siksna pamatiiga+pleeve], motors RU, tikai ciparus atceros - 200 [parasts, zaljsh]..
b) mini solji, forseta jauda ieskrienoties/bremzeejot
c)pakaapeniska aatruma uznjemshana/pakaapeniska bremzeshana

2. funkcijai
a) PLL, noturiiba suudiiga spanja gadiijumaa
b) preheat, preciiza izejas jauda

ieeja: DMX512, 250kbodi
2gab. PIC84, ar R tiek formeeti 8 liimenju level inisoljiem [tups DAC].

menu 3 llimenji.
pamatlietas:
adrese
mode [analogi vai diskreetaas poziicijaas biidiit]
klaasteru skaits plevee
saakuma shift
klaastera platuma korekcija
preheat on/off
preheat level
max out limit on/off
max out level
speed: norm/reduced
strobo mode
service, kalibreshanas, diagnostikas, u.c. modes..
pashdiagnostika..


iisteniibaa - ar konreetajiem risinaaumiem aatrums un jauda, ko izspiedu no taa steppera, bija liidz tam neredzeets. NESALIIDZINAAMI aatraaks kaa Kazaaka colorchangeros, vai Jura konstrukcijaas  ::

----------


## JDat

paies laiks, kamēr izgremošu tavu info. Drīkst šmaukties: smelties idejas ar google palīdzību?

PS: vēl ne kad neesmu ne ko darījis ar 2x16 LDC dzīvē. Tikai lasījis pdf  ::  Dzīvē vēl nav bijusi vajadzība.

----------


## kaspich

> paies laiks, kamēr izgremošu tavu info. Drīkst šmaukties: smelties idejas ar google palīdzību?
> 
> PS: vēl ne kad neesmu ne ko darījis ar 2x16 LDC dzīvē. Tikai lasījis pdf  Dzīvē vēl nav bijusi vajadzība.


 es nepiesakos kontroleet, ko Tu shonakt dariisi  :: 
man bija 4gab. parastie indikatori..

----------


## JDat

ko, ko? Gulēšu. Rīt uz darbu.  ::

----------


## kaspich

http://bildez.lv/bildes/kaspich/siikumi ... 417201.jpg


http://bildez.lv/bildes/kaspich/siikumi ... 417205.jpg

oldskuuls skarbs..

----------


## JDat

pa skarbo. Pilns ar paralēlajiem reģistriem. Ja godīgi tad rokas nolaižas kaut ko darīt, bet solītais jāpilda. Ceru ka nav termiņu fw iesniegšanai.  ::  Nesteidzoties padomāšu. Simistora vadībā varu izgāsties. Ar motoru un dmx arī praksē neesmu krāmējies. Prasās pēc hw uz kura taisīt eksperimentus.  ::  Darīšu ko varēšu. Interesanti ibio. Ir pcb un aparāta bildes?

----------


## JDat

kas tur ar kvarcu pie U11? Vienā shēmā, nav un clk nāk no U1 kvarca ģeneratora, otrā lapā uzzīmēts savs kvarcs U11.

----------


## kaspich

> kas tur ar kvarcu pie U11? Vienā shēmā, nav un clk nāk no U1 kvarca ģeneratora, otrā lapā uzzīmēts savs kvarcs U11.


 nu, ja ir shaadi jautaajumi, droshi varam atlikt taalaaku ciiinju.. :P
sore par skarbumu :P

----------


## JDat

nu kapēc atlikt... ka reiz sāku lasīt teoriju par dimmeriem ar praktiskām shēmām un paskaidrojumiem.

Hz vai tev vajag kaut kādu lock starp MCU vai nē. Kur fiška?? Manuprāt ir pilīgi poo, kā tur ir. Var iztikt bez lock. Galvenais ka divās lapās ir pretrunīga informācija. Precizitāte zinies. NAv viennozīmīga info, a gribās precizitāti. Shēmās. Lai nu kā, tas neietekmē kodēšanu ne maz (ja nu vienīgi fuse bits lai korektāk, bet var arī likt mīksto).

Interesanti paskatīties uz jaudas daļu ar simistoru un zero crossing. Kā reiz idejas priekš habitbraker.  :: 

Kas uz ST12 konektora slēdzās? Tur tranis KT972 kaut ko komutē? Pirmo reizi tādu padomju trani redzu. Laikam jaudīgs (sovjetu traņus gandrīz nepazīstu). Arī tas neietekmē kodēšanu (teorētiski). Galvenā aizture uz kodēšanu ir aizņemtība, un ja paliek brīvs laiks, tad liels slinkums.

Pirmais PIC (U1) nodarbojas ar DMX, config, indikāciju un dod vadību otram PICam (U11). Otrais nodarbojas ar komandu saņemšanu no pirmā MCU, motora un simistora vadības lietām. Abi nodarbojas ar dianostiku.

----------


## JDat

bļ 2 reiz iepostējās. Un es biju domājis konektoru ST14. Nejauši pārrakstījos. ST12 barošana.

----------


## kaspich

> bļ 2 reiz iepostējās. Un es biju domājis konektoru ST14. Nejauši pārrakstījos. ST12 barošana.


 godiigi sakot - neatceros..  :: 

pag, kaadu precizitaati? :P Tu tak arii esi elektronikas inzhenieris, Tev vispaar - tikai navodkas vajadzeeja dot  ::

----------


## JDat

Nu navodkas tas ir labi, bet ja shēmā redzu dīvainu, tad ir interese noskaidrot pie autora kāpēc tā un ne savādāk. Sūdz ar ST14, ignore. Sūdz par kvarcu lietām, arī ingore.

Labāk paēdīšu vakariņas un aizmigšu skatoties TV.  ::

----------


## kaspich

es taa saprotu, ka jdat jau uztaisiijis skrolleri/dimmmeri?  ::

----------


## JDat

nē. nu nafig, Laika Nav ar lielo burtu. Man iepatikās tā vienkāršība un efektivitāte ar simistoru. Pa laikam (tika galvā) domāju par simistora vadības kodu. Jā jā un preheat arī ņemts vērā.

----------


## habitbraker

man te viens jautājums radās. Ir man divas pultis - abas RC5, viena TV un otra muuzikas centra. Lieta taada, ka muuz. centra. pultij adreses kods mainaas katrai pogai savaadaaks. Ar komandu kodu viss kaartiibaa. 
TV pultij vispaar viss kaartiibaa - adreses kods nemainiigi 0.
Varbuut man kautkaada nestandarta pults gadiijusies?

----------


## kaspich

> man te viens jautājums radās. Ir man divas pultis - abas RC5, viena TV un otra muuzikas centra. Lieta taada, ka muuz. centra. pultij adreses kods mainaas katrai pogai savaadaaks. Ar komandu kodu viss kaartiibaa. 
> TV pultij vispaar viss kaartiibaa - adreses kods nemainiigi 0.
> Varbuut man kautkaada nestandarta pults gadiijusies?


 shitaas RC series nebija programmeeejamaas? tb, caur IR portu vnk iedzen kodingu. all4You.pl vai tik nebija saits :P

----------


## habitbraker

Neticu, ka man to pulti var kautkaa programmeet. Ar to saitu kautkas nav.

----------


## kaspich

> Neticu, ka man to pulti var kautkaa programmeet. Ar to saitu kautkas nav.


 sore: made4you.pl [bet, kantoris profilu mainjiijis, Argus arii vairaak nepiedaavaa]
es tieshi shobriid turu rokaas taadu pulti. veel kaut kur tas IR suu&^ meetaajas, softs gan varetu buut miskaste izmests..

----------


## habitbraker

Paga  ::  es iisti neizpratu, ko man tajaa saitaa vajadzeetu mekleet.  
Nu jaa, laikam jau jaasamierinaas ar to pasu. Taapat izmantosu triis pogas uz taas pults un pagaidaam nolasu un izfiltreeju peec komandu koda (ar vienkaarsu atnemsanu un saliidzinaasanu).
tad veel jautaajums - ar 10us impulsu optosimistoram buus gana?

----------


## kaspich

> Paga  es iisti neizpratu, ko man tajaa saitaa vajadzeetu mekleet.  
> Nu jaa, laikam jau jaasamierinaas ar to pasu. Taapat izmantosu triis pogas uz taas pults un pagaidaam nolasu un izfiltreeju peec komandu koda (ar vienkaarsu atnemsanu un saliidzinaasanu).
> tad veel jautaajums - ar 10us impulsu optosimistoram buus gana?


 saitaa - vairs jau neko. nav vairs taa kantora/softa..

RC5= remote control, 5 versija. universaalaa pults. 
10uS? domaaju, nee. liec vismaz 500uS [protams, nepaarsniedzot 0 punktu, pie taa - reset]. citaadi uz induktiivas slodzes [starp simistoru un spuldzi taadu vajag, taapat - RC demferi paraleeli simistoram + varistoru].

----------


## JDat

Kaspich! A drīkst izmantot tavu simistora un nulles punkta detektēšanas shēmu saviem mērķiem? Gadījumā ja nu man kādreiz dzīvē ievajagās kaut ko ar simistoru vadīt.

Ak jā. Par to kodēšnau. Man steidzami jāuzbūvē viens nestandarta daikts RS-232 lietām. AVR tur arī dzīvos. Termiņi spiež. Laika vēl mazāk paliek izklaidēm (ari koda lietām priekš tavas eleemsmašīnas).  ::

----------


## habitbraker

Tikko sastelleeju visu ar simistoru. Pie 220 gan neliku, bet gan caur trafu. 
Visu laiku domaaju, ka triakam pietiek ar vienas polaritaates impulsu abiem pusperiodiem - acimredzams, ka taa nav  ::  Lieta taada, ka uz slodzes redzu tikai vienu pusperiodu (un tas graizaas ideaali).
Kaa es varu dabuut abas polaritaates impulsus un geitu? Jeb kautko neesmu izpratis liidz galam?  ::

----------


## next

Nu vismaz tad sheemu iepostee.

----------


## habitbraker

PIC savienojums ar simistoru kaa sajaa sheemaa: http://www.rlocman.ru/i/Image/2007/11/0 ... snyj_1.gif vai http://hackedgadgets.com/wp-content/2/s ... ics_v1.png
Kaa slodze ir rezistors
PIC dod pozitiivus impulsus. Bet redzu tikai pusperiodu

----------


## next

Prieksh taadas sheemas vajag 4 kvadrantu triaku.
Un pat ja tas ir taads tad ceturto kvadrantu izmantot nav laba doma.

----------


## habitbraker

Nu izmantoju BT136 http://www.datasheetcatalog.org/datashe ... ES_E_2.pdf
Cik saprotu tas ir 4 kvadrantu triaks

----------


## next

Cik garsh impulss, cik liels spriegums, kaada straava, varbuut nepietiek straavas atveertaa staavoklja notureeshanai.

----------


## habitbraker

Gate impulss - 500us
Straava?: Nu  AC 15VRMS un slodze 1K
Jaaskataas tas laching current?

----------


## next

> Jaaskataas tas laching current?


 Gate trigger current arii pirmajai sheemai liidz ar nagiem, otrai puse no vajadziigaa.

Elfai drusku citi cipari ieksh PDF.
https://www1.elfa.se/data1/wwwroot/asse ... T136_e.pdf

----------


## habitbraker

Nu paldies. Laikam taa arii buus probleema. Palasiijos par tiem kvadrantiem un viss apstiprinaas - 4 kvadrantaa geits ir vis nejuutiigaakais. 
Riit turpinaashu  ::

----------


## kaspich

oi, tik daudz lietu uzreiz.
1. habit, kaa Tu domaa - nafiga te bija teema par MOC3020? taapat vien?  :: 
2. triacam [parastam] vajag vai nu NEGATIIVAS polaritaates straavu jeb SAKRIITOSHAS polaritaates ar A2. Tevir nepareizas - pozitiivas polaritaates straava [skat.p.5]
3. 1k slodzee - triacs veersies ciet [skati Ihold], respektiivi - japalielina slodzes straava liidz paardesmit mA
4. paarbaudi, kaada ir Igate max nostradashanai. Tavaa gadiiumaa - 1..2mA. iespeejams, ka vajadzees vairaak [bet, polaritaate ir greiza]
5. ok, shis mums straadaa no abaam polaritaateem, bet skati Igate. tai ir jaabuut vismaz 30!!!!!!!!!mA. Tev ar kaartu nedavelk liidz pirmajiem 3 kvadrantiem. taatad: jaudas pastiprinaataajs jaapieviesh. un reekjinies: papildus pateerinjsh vismaz 3..4mA [pie Q=10 jeb impulsa garuma 1mS]
vispaar tas T2-G+ kvadrants ir simbolisks - 5X mazaaks dI/dt, suudiigaaks Ihold.. ok, dimmeram der, bet.. liekot MOC2030, Iled=5mA, triac nestraadaa 4.kvadrantaa + eksperimentu laikaa galvaniskaa atsaiste..


jdat - da izmanto peec sirds patikas - autortiesiibas pieteicis neesmu  ::

----------


## habitbraker

Gribeejaas baigi izmeeģinaat pirmo reizi un nebi veel tas MOC3020   ::  
Nu cik sapratu es vinu meeginaaju darbinaat 1. un 4. kvadrantaa. Gate trigger cur. manam triakam ir min 10mA, kas JAU man nav  :: 
Un jaa , ja holding current manam triakam ir min 1.4 mA , Tad pie 1K slodzes veersies ciet jau pie 1,4 V. Taa ir?

Aa Veel paspeeji info dot. Nu jaa final sheemaa buus tas MOC. Sapratu - jaaliek pastiprinaataajs , lai darbinaatu 1.un 4. kvadr. Taatad 30 mA jaadod geitam

----------


## kaspich

> Gribeejaas baigi izmeeģinaat pirmo reizi un nebi veel tas MOC3020   
> Nu cik sapratu es vinu meeginaaju darbinaat 1. un 4. kvadrantaa. Gate trigger cur. manam triakam ir min 10mA, kas JAU man nav 
> Un jaa , ja holding current manam triakam ir min 1.4 mA , Tad pie 1K slodzes veersies ciet jau pie 1,4 V. Taa ir?


 nu jaa, vieniigi, Ihold max=10mA.. un reekjini, ka uz gate vismaz kaadi 2V ir/buus. tb, uz 800 ohm kriit 3V, kas ir.. 2.5mA, skjiet  ::

----------


## habitbraker

Paldies! Nu ja pienem, ka geitam ir Uforvard 0.7V tad prieks 5V gate impulsa un 30mA straavas buutu vajadziigs 140R ?
Bet nu protams caur em atkartotaaju laidiisu.   ::

----------


## kaspich

1. gate forvard voltage ir 1.5V max
2. ja liksi E atkaartotaaju, buus liels kritums Uce, tad jau labaak ar kopeeju E pnp tranzistoru, ar mazu Uce piesaatinaajuma spriegumu, tad R=100ohm

----------


## habitbraker

Uzliku to em atkaartotaaju un samazinaaju slodzi un viss aizgaaja perfekti  :: 
Tagad jaagaida tas MOC un tas jaizmeegina ar 220V

----------


## habitbraker

ee, kaa tad pagaidiisu MOC!  :: 
nenocietos un piesleedzu pie 220 V ar spuldzi un viss taa pat straadaa  :: 
Vieniigais taa beztransformatora barosana  palikusi - itkaa gribaas, bet kad paskataas, cik daudz aiziet siltumaa, vairaak negribaas.

----------


## kaspich

pag, a kas Tev tur aiziet siltumaa??  ::

----------


## habitbraker

nu taa man ierieks posteetaa sheema - tas balasta (?) rezistors pirms tilta. Uz vina kaadi 4-6W prieks manas vajadziigaaas straavas (<=10mA)
Var jau likt kondensatoru, bet tad zero crossing nobiidiits

----------


## kaspich

> nu taa man ierieks posteetaa sheema - tas balasta (?) rezistors pirms tilta. Uz vina kaadi 4-6W prieks manas vajadziigaaas straavas (<=10mA)
> Var jau likt kondensatoru, bet tad zero crossing nobiidiits


 nu redz, taa ir, kad iisti neizdomaa konceptu :P
es redzu 2 variantus:
1. ja Tev vajag galvanisko atsaisti [eertaak programmeet/gruutak pa knagjiem dabuut] - absoluuti vienkaarsha sheeminja impulsniecinjam [trafinjsh - gredzentinjsh, ar burtiski: 10+5+2 vijumi];
2. likt balasta C, un modificeet zero krossinga dalju, lai tas smuki straadaa [simetriski] bez tilta ieejaa.

saki, ko gribi. jeb iemest abus?  ::

----------


## habitbraker

tas imulsnieks gan labi izklausaas. Tev ir sheema? 
Bet, lai gribeetu zero crossing smukus impulsus tas tilts tomeer man vajag. Ja buutu An Comp tad vareetu ar daliitaaju. A varbuut, ja nelieto tiltu var taa - tranis atveraas||aizveraas uz visu pusperiodu un tad sanaak, ka up fronte ir viens zero cros un down fronte ir otrs zero cros. 
Nu taa pielaagosanaas C radiitai nobiidei neliekas smuka  ::

----------


## kaspich

> tas imulsnieks gan labi izklausaas. Tev ir sheema? 
> Bet, lai gribeetu zero crossing smukus impulsus tas tilts tomeer man vajag. Ja buutu An Comp tad vareetu ar daliitaaju. A varbuut, ja nelieto tiltu var taa - tranis atveraas||aizveraas uz visu pusperiodu un tad sanaak, ka up fronte ir viens zero cros un down fronte ir otrs zero cros. 
> Nu taa pielaagosanaas C radiitai nobiidei neliekas smuka


 tagad ir:



gredzenu kaadu 15mm aareejo D [lai eertaak], gaisa spraugu ap 0.1mm, tunumi [aptuveni]:
12 C kjeede
5 izejaa
3 baazes kjeedee

----------


## kaspich

nu, var jau arii shaadu zero crosu taisiit, kaut nav mega skaisti.. paraadaas augstomiiga izeja..

----------


## habitbraker

Paldies par sheemaam. Tas imulsu baroklis man kaa taads buutu paveersiens  :: 
Domaajot par impulsu barokļiem - a mosk izpleest no kaada mobiilaa laadekļa  ::

----------


## kaspich

> Paldies par sheemaam. Tas imulsu baroklis man kaa taads buutu paveersiens 
> Domaajot par impulsu barokļiem - a mosk izpleest no kaada mobiilaa laadekļa


 nez.. prieksh kam? Tev jaudu vajag 20X mazaaku. un, tas tapat nav risinaajums - naakoshajam [draugam, piem.] atkal kaut ko pleesiisi? stulbi..
salodee sho te. kad tiksi liidz iekshaa sleegshanai, paliidzeeshu palaist/optimizeet. i buus super. kompakts, nesils..

----------


## JDat

Varbūt stulbs jautājums, bet kur tādam trafam serdi izrakt? Ir nopērkama. Tas adījumam ja pa rokai neatrodas izārdīts trafiņš no impulsbarkļa. Ir kāds piemērs (links) no elfa vai argus? Vai nu lēts trafs uz izvarošanu vai serde. Kā ir ar drošību tādam trafiņam. Kā uztīt lai primārajā tinumā neizsit. Varbūt Cien. Kaspicha kungs var uztaisīt topiku pamācību vai transformatoru sadaļā par šo tēmu.   ::

----------


## kaspich

> Varbūt stulbs jautājums, bet kur tādam trafam serdi izrakt? Ir nopērkama. Tas adījumam ja pa rokai neatrodas izārdīts trafiņš no impulsbarkļa. Ir kāds piemērs (links) no elfa vai argus? Vai nu lēts trafs uz izvarošanu vai serde. Kā ir ar drošību tādam trafiņam. Kā uztīt lai primārajā tinumā neizsit. Varbūt Cien. Kaspicha kungs var uztaisīt topiku pamācību vai barokļu sadaļā par šo tēmu.


 kaspich ir slinks kaa.. 

serdi? shajaa gadiijumaa njemam jebkuru ferritu - mieriigi ar mjuu 2000..3000 un vairaak
der gan W veida, gan brunju tipa, gan vnk gredzens..
jebkuraa gadiijumaa - gaisa spraugai [ka jau vientaktniekam] jaabuut.

par droshiibu: sekundaro tinumu [4..6 vijumi] es parasti tinu ar montaazhas vadu, var MGTSh, tad nevareetu buut nekaadu jautaajumu.

https://www.elfa.se/elfa3~lv_lv/elfa/in ... toc=20256;

mieriigi shaadus..

----------


## JDat

Skaidrs. Paldies! Tēma interesanta. Es varētu (jo esmu Dieva vietā) uztaisīt topiku un pārcelt SMPSU tekstus uz turieni. Tad varēsi tikai pierakstīt piebildes un atbildēt uz (iespējams lameriskiem) jautājumiem. Tā der?

Ar laiku varētu līdzīgi darīt ari ar simistoru lietām...

----------


## bbarda

JDat man viens jautājums netēmā,vai var būt parastam 0,125w rezistoram  pretestība 0,740k??? Vairāk man prāts nesas ka tam ir novirze un vajadzētu būt 1k

----------


## Slowmo

740R nav standarta resiztors. Tuvākās E12 vērtības ir 680 vai 820 omi. 1K ir pārāk tālu un tur vairs nesanāk 10% kļūda.

----------


## bbarda

> JDat man viens jautājums netēmā,vai var būt parastam 0,125w rezistoram  pretestība 0,740k??? Vairāk man prāts nesas ka tam ir novirze un vajadzētu būt 1k


 Skatījos pēc krāsu kodiem it kā vajadzētu būt 475 R bet testeris rāda 0,740k,pārejās parādija atbilstoši marķējumam,rezistori visi jauni.Laikam vecums nenāk viens!

----------


## Vikings

> Skaidrs. Paldies! Tēma interesanta. Es varētu (jo esmu Dieva vietā) uztaisīt topiku un pārcelt SMPSU tekstus uz turieni. Tad varēsi tikai pierakstīt piebildes un atbildēt uz (iespējams lameriskiem) jautājumiem. Tā der?
> 
> Ar laiku varētu līdzīgi darīt ari ar simistoru lietām...


 Takš priekš kam saraustīt topiku, kurā vismaz šobrīd process skaidri pa soļiem tiek iziets cauri?

----------


## JDat

Tad jau copy. Impulsnieks ir laba lieta un var noderēt daudz vairāk ne kā tikai šitajā topikā. Diez vai Didzis un Obsis (vai cits analogais) atradīs idejas par impulsnieku lietām un praktiskiem padomiem. Manuprāt tik interesanta un noderīga lieta, ka var noderēt daudz lielākām masām, nevis tikai PIC dimmera būvētājiem. Pie tam varēs apmuļļāt visus aspektus un nezināmos.  ::

----------


## habitbraker

https://www.elfa.se/elfa3~lv_lv/elfa/in ... toc=20256;

Kautkas sitai liidziigs derees ?

Nez links vairs nedarbojas. Datasheet : https://www1.elfa.se/data1/wwwroot/asse ... 4704_e.pdf

----------


## kaspich

> https://www.elfa.se/elfa3~lv_lv/elfa/init.do?toc=18708&name=pas.vie_komponenti#toc=20256;
> 
> Kautkas sitai liidziigs derees ?
> 
> Nez links vairs nedarbojas. Datasheet : https://www1.elfa.se/data1/wwwroot/asse ... 4704_e.pdf


 derees. gaisa spraugu zini, kaa uztaisiit?  ::

----------


## habitbraker

kaadu papiiru starpaa?
Bet nepietiks, tiisu ar izoleetiem vadiem?

----------


## kaspich

stop. gaisa sprauga noziimee, ka magneetiskajaa materiaalaa ir jaabuut 'paaraavumam'. shajaa gadiijumaa - gredzenam vajag vai nu izzaagjeet spraudzinju 0.1mm, vai paarlauzt to uz puseem, un katraa no spraugaam ielikt papiiriiti 0.05mm un tad saliimeet atpakalj kopaa.

kaa to izdariit.
1. sasleegt elektrisko sheemu ar 40W/230V spuldzi, 2 multimetra taustiem un rozeti. iesprauzham rozeti tiiklaa. savienojot taustus, spuldzei jaaiedegas.

tad: vienu taustu turam nekustigi, otru paarvietojam pa apli, apkaart gredzenam [tur, kur vajag paarlauzt]. 10sec laikaa luuzuma vietas buus gatavas. ja vajag, piepaliidzam paarluuzt ar maigu uzsitienu pa malu.

----------


## habitbraker

Kaa? iisti nepieleca par to 40W spuldzi.
Jaaptin  vads pa diametru apkaart gredzenam un ar spuldzi virknee jaapievieno tiiklam? Un paraadiisies luuzuma vietas? Nee taču ..   :: 

Aa, un kapeec taada sprauga vajadzīga?

----------


## kaspich

> Kaa? iisti nepieleca par to 40W spuldzi.
> Jaaptin  vads pa diametru apkaart gredzenam un ar spuldzi virknee jaapievieno tiiklam? Un paraadiisies luuzuma vietas? Nee taču ..


 nee, jaaizmanto ferriits kaa vaditaajs. vienu taustu turi nekustiigi piespiestu, ar otru - brauc pa vajadziigo luuzuma vietu pa ferrita virsmu.

----------


## habitbraker

Nu tagad skaidrs par lauzsanu.
Bet daudzkas nav skaidrs  ::  Kaapeec vins saluust? Kaapeec vajag gaisa sprauga? Vispaar nezinu pat kaa tas PSU darbojas - jauna lieta man.

----------


## JDat

Kā strādā? Tā pat kā citi impulsbarokli. Pirincips: 220/50 Hz pārvērš par ~350V DC. Tad ģenerators uztaisa AC (taisnstūris) ar vairākiem desmitiem kHz , kas iet uz trafu. Trafam, kā jau pienākas, uz seknudārajā tinumā parādās AC tikai ar citu spriegumu. Iztaisnojam un mums ir vajadzīgais DC. Tas teorijā. Nianses parādās uzbūvējot trafu tādām frekvencēm (man nav ne mazākās poņas kā to jādara). Trešais tinums ir sauktā atgriezeniskā saite. No tā tinuma spriegums nonāt atpakaļ ģeneratorā,ģenerators attiecīgi "pieregulējas" lai sekundārajā tinumā paliek stabils spriegums. Tas viss teorijā. A praksē... Daudz nianšu. Nu i nafig, tas nav priekš manīm, lai arī ir interesanti un noderīgi.  ::

----------


## habitbraker

Nu tik lielos vilcienos jau bija skaidrs. Bet niansees nekas nav skaidrs. Piemeeram kaspich sheema. 


Kaa darbojas tas ģenerators, kaa darbojas taa atgrieziniskaa utt.

----------


## kaspich

jdat te par kaut ko citu..  :: 

taatad:
47ohm/1W ierobezho I sitienu iesleegshanas briidii - pasargaa tiltu, noveersh dzirsteljoshanu rozetee
0.47uF/400V - nodzeesh lielko dalju no 230V [darbojas kaa balasts]
20v zener - vairaak aktuaals testu laikaa, ierobezho U primaarajaa [tikla] pusee
tilts+ 100uF/35V - taisngriezis

viss straadaa sekojoshi:
100uF uzlaadeejas.
galvenais tranzistors [pa labi, piesleegts trafam] saak pieatveerties, jo B kjeedee ir 33K pretestiiba uz +.
trafa primaarajaa tinumaa [Collectr kjeedee] tiek pievadiits  U. shis pats U induceejas pashieroshmes kjeedee [tinums uz baazi], kas forseeti atver jaudas trani.
ferriitaa tiek uzkraata energjija, pieaug I caur kolektoru. kad taa sasniedz 0.6V uz 10R pretestiibas  [60mA piikjii], parstraavas tranzistors saak vert ciet jaudas traniiti.
tajaa briidii U primarajaa tinumaa samazinaas, ierosmes tinumaa samazinaas - tranis veraas ciet. U primaarajaa [ari ierosmes] tinumaa maina ziimi - jaudas tranzistors forseeti aizkriit ciet.
shajaa briidii ferriitaa uzkraataa energija caur diodi sekundaarajaa tinumaa tiek nodota slodzei: 5v1 zeneram un fitra kondensatoram.

gaisa sprauga - lai ferrits nepiesaatinaatos.

----------


## next

Ir speciaalas mikrosheemas prieksh taadaam lietaam.
FSDM311

----------


## kaspich

next ir apguvis pirmos soljus elektronikaa, tas priecee.
dazhas piebildes:

1. shaadas IC ir jeega izmantot krietni lielaakaam jaudaam [>10W, ne 50mW];
2. shaadas IC barojas pa tiesho no 230 [logjiski], ka sekas - mazaaka droshiiba un jaaatin nesaliidzinaami daudz vairaak vijumu primaarajaa, shema nesalidznaami kapriizaaka pret trafa parametriem.

----------


## habitbraker

AA paldies! Nu jau paliek skaidraak. 
Taatad tranim, kura C keede ir primaarais jaiztur 60 mA, ja tam apakseejam ir 10R starp B un E. Apakseejais atveersies un noiisinaas augseejam baazi uz zemi - taatad aizveers. Bet cik ilgs laiks paies kameer tiks sasniegti tie 60ma?  Gadiijumaa nav momentaa?, jo caur feedback C vislielaakaa straava ir pasaa saakumaa

Un taa polaritaate  mainaas tapeec, ka straava spolee samazinaas, kas arii inducee preteeju spriegumu, kas nelauj straavas izmainu? Tas nav pasindukcijas U? Tas izskaidro to, ka sekundaarais ir preteeji tiits?
Tas viss neiskatiitos taa :  iiss impulss, pazuziite kameer "noplok" pasindukcijas spriegums un atkal ipmulss utt?

----------


## kaspich

ha, paskati tinumu faazeejumu!
tajaa briidii, kad tranzistors ir atveeries, uzz izeju nekas padots netiek. energjija tiek uzkraata ferriitaa. taadeelj - saakumaa I=0 un aug pakaapeniski.
cik ilgaa laikaa sasniegs 60mA? atkariigs no ferriita mjuu, vijumu skaita primaarajaa/sec tinumaa. neesmu rekjinaajis - praktiski vareesi ieveerteet. taa, uz aci.. 30..80khz vareetu buut darba frekvence..
jaudas trani labaak njemt ar mazu Ube piesatinaajuma - buus mazaaki zudumi.
Ucemax - vismaz 50V

tie cikli ir sekojoshi:

1. tranis atveerts. I kaapj. Uin piesleegts primaarajam tinumam. trafaa uzkraajas energjija. Uout pretejaa virzienaa, diode aizveerta
2. I sasniedz 60mA, tranis saak veerties ciet
3. tranis aizveeries, Uout trafam nomainiijis ziimi, energjija tiek atdota slodzee
4. energjija saak izsiikt, kaa izsiikst, U nooscilee, iestaajas 1. cikls

----------


## next

> 1. shaadas IC ir jeega izmantot krietni lielaakaam jaudaam [>10W, ne 50mW];
> 2. shaadas IC barojas pa tiesho no 230 [logjiski], ka sekas - mazaaka droshiiba un jaaatin nesaliidzinaami daudz vairaak vijumu primaarajaa, shema nesalidznaami kapriizaaka pret trafa parametriem.


 Viss pareizi, dimmerim neko vairaak kaa 0,1 mkF+reziikli balastaa nevajag, paarveidotaajus citaam vajadziibaam taisa.
Trafu amatieru vajadziibaam nav jaatin, no beigta datora PSU var izlodeet.

----------


## kaspich

> 1. shaadas IC ir jeega izmantot krietni lielaakaam jaudaam [>10W, ne 50mW];
> 2. shaadas IC barojas pa tiesho no 230 [logjiski], ka sekas - mazaaka droshiiba un jaaatin nesaliidzinaami daudz vairaak vijumu primaarajaa, shema nesalidznaami kapriizaaka pret trafa parametriem.
> 
> 
>  Viss pareizi, dimmerim neko vairaak kaa 0,1 mkF+reziikli balastaa nevajag, paarveidotaajus citaam vajadziibaam taisa.
> Trafu amatieru vajadziibaam nav jaatin, no beigta datora PSU var izlodeet.


 par to trafa iznjemshanu = mulkjiibas! kaapeec Tu iesaki lietas, ko nezini?

----------


## next

> par to trafa iznjemshanu = mulkjiibas! kaapeec Tu iesaki lietas, ko nezini?


 Nu pastaasti, ko es nezinu.

----------


## kaspich

> par to trafa iznjemshanu = mulkjiibas! kaapeec Tu iesaki lietas, ko nezini?
> 
> 
>  Nu pastaasti, ko es nezinu.


 to, kaa darbojas impulsnieki. kaa tiek veidoti trafi tiem. kaa/kaapeec nevar vnk panjemt cita impulsnieka trafu un paarmest citaa sheemaa..

----------


## next

> to, kaa darbojas impulsnieki. kaa tiek veidoti trafi tiem. kaa/kaapeec nevar vnk panjemt cita impulsnieka trafu un paarmest citaa sheemaa..


 Esi dzirdeejis ka datoru PSU ir dezhuurbaroshanas sheema?
Nu vot, vinja veidota tieshi peec augstaak redzamaas bildes un tur taisni vajadziigais trafs iraid.

----------


## kaspich

> to, kaa darbojas impulsnieki. kaa tiek veidoti trafi tiem. kaa/kaapeec nevar vnk panjemt cita impulsnieka trafu un paarmest citaa sheemaa..
> 
> 
>  Esi dzirdeejis ka datoru PSU ir dezhuurbaroshanas sheema?
> Nu vot, vinja veidota tieshi peec augstaak redzamaas bildes un tur taisni vajadziigais trafs iraid.


 ko Tu man gribi pieraadiit? ka speej izraut chupinju detalju no kompja barotaaja? vai Tev tas skjiet profesionaali? vai kaut vai tehniski korekti?
un es runaaju par to, ka nevar paarmest tikai trafu, iemest jebkuraa sheemaa. blin, cilveek, ja Tev shiis teemas ir par sarezgjiitu - nu, neleekaa..

----------


## next

> un es runaaju par to, ka nevar paarmest tikai trafu, iemest jebkuraa sheemaa. blin, cilveek, ja Tev shiis teemas ir par sarezgjiitu - nu, neleekaa..


 Nu tad apraksti kaadas probleemas tur radiisies un kaa ar taam ciiniities.

----------


## kaspich

probleemas? probleemas buus dazhadas - nenormaala darbiba [f neatbilstiiba, paketeeshana, nenormaali u izsitieni reguleejoshaa elementaa, I forma nenormaala], nenormaals lietderiibas koefs, nespeeja uztureet izejas parametrus..
kaa risinaat? projekteejot trafu konkreetai aplikaacijai.

----------


## next

Taatad mana rekomendaacija amatierim izmantot ruupnieciski razhotu detalju tieshi taadaa sheemaa ka paredzeejis izgatavotaajs ir slikta?
Es domaaju paareejie foruma daliibnieki jau sen sapratushi ko veerti tavi ieteikumi, shodienai pietiks.

----------


## kaspich

> Taatad mana rekomendaacija amatierim izmantot ruupnieciski razhotu detalju tieshi taadaa sheemaa ka paredzeejis izgatavotaajs ir slikta?
> Es domaaju paareejie foruma daliibnieki jau sen sapratushi ko veerti tavi ieteikumi, shodienai pietiks.


 nozheelojams smurguleens.. kas Tevi aizskar? ka, izraadaas, knapi pazisti detaljas, un es atljaujos uz to noradiit? nu, taa gadaas, kad ponti un sajeega nesakriit..
atvainojos par sasaapeeto reakciju. vnk kretinee nejeegas, kas meegjina pontot, stundaam dzen dumumu/paarbauda pacietiibu, pashi nejeedz, bet meegjina kaut kaadu dumumu ieteikt.. nekaada konkreta dialoga/ideju, tikai mistiskas vaardu speeles. nejeedz - taa arii pasaki.

----------


## JDat

rezumējot kaspicha un next seksiņu, var izdarīt vairākus secinājumus:
katram impusbaroklim savs trafs. Nu ne gluži katram, bet tomēr. Hmm kā ir ar rūpnieciskiem trafiem? Sanāk ka nav tik univerisāli un vienkārši lietojami amatieru konstrukcijās bez pārtīšanas?
Ja vajag mazu barokli uz 5V tad var izraut trafiņu
 un detaļas no PC barokļa. Partizāniska bet lietojama metode, ja labāk nemāk. Čakars pārnes detaļas uz vafeli. Noder ja klasiskais baroklis pārāk liels un 7805 dzesēšana nesanāk. Enīvei gemarojs, bet var.

Ja vajag mikrobu spēciālam gadījumam vai grib iemācīties impulsbarokļu būvēšanu tad var atkārtot kaspicha shēmu. Arī čakars, bet ja strādā un nesilst tad gandarījums liels un maz vietu aizņem.

Kā vienmēr: katrai situācijai savs risinājums.

Redzēsim kā ies ar būvēšanu.

----------


## kaspich

impulsnieki ir nesaliidzinaami kapriizaki kaa linearie.
kaut kaadu gatavu trafu nav, jaaprojektee katru reizi jauns
impulsniekiem ir daudz shauraaks slodzes jaudas diapazons - pie mazaam slodzeem saak iet 'zaraa' [paketee, sleedzaas arraa, u.t.t.]
ir dazhaadi risinaajumi, atkariibaa no pielietojuma: buck/boost/flyback [var wiki skatiit iesaakumam]
buutiska katra komponente [pat pretestiibu tipi, celinju garumi, elementu izvietojumi, u.t.t.]

labs/drosh impulsnieks ir maaksla. gemors konkreets.
par to pc barotaaja paarmeshanu - jaa, var VISU risinaajumu paarmest. atseviskji trafu - nee, buutiska visa paarejaa sheema. vai to var uzskatiit par risinaajumu/teemas veertu pasaakumu? manupraat, nee. piedevaam - min slodze jaaievero, citaadi buus ziepes.

----------


## JDat

par min slodzi dzirdēts. Kā ir ar min slodzi tevis piedāvātajai shemai?

----------


## kaspich

shai sheeminjai slodzes paarpalikums dzeeshaas 5v1 stabilitronaa. attieciigi - liidz 40..50mA [max] straavai Pmin=0
ja vajag ko lielaaku - U stabilizaacija jaapieviesh vai paraleelais stabilzators izejaa.

----------


## habitbraker

> ha, paskati tinumu faazeejumu!
> tajaa briidii, kad tranzistors ir atveeries, uzz izeju nekas padots netiek. energjija tiek uzkraata ferriitaa. taadeelj - saakumaa I=0 un aug pakaapeniski.
> cik ilgaa laikaa sasniegs 60mA? atkariigs no ferriita mjuu, vijumu skaita primaarajaa/sec tinumaa. neesmu rekjinaajis - praktiski vareesi ieveerteet. taa, uz aci.. 30..80khz vareetu buut darba frekvence..
> jaudas trani labaak njemt ar mazu Ube piesatinaajuma - buus mazaaki zudumi.
> Ucemax - vismaz 50V
> 
> tie cikli ir sekojoshi:
> 
> 1. tranis atveerts. I kaapj. Uin piesleegts primaarajam tinumam. trafaa uzkraajas energjija. Uout pretejaa virzienaa, diode aizveerta
> ...


 Paldies sitais nu ir skaidrs  ::  Bet nu sanaak tas efekts, ka tas spriegums beigaas maina polaritaati, jo censas sagalabaat feriitaa uzkraato lauku?

----------


## kaspich

nu, shiis lietas - back to basics. skatam fiziku.  ::

----------


## habitbraker

> tas imulsnieks gan labi izklausaas. Tev ir sheema? 
> Bet, lai gribeetu zero crossing smukus impulsus tas tilts tomeer man vajag. Ja buutu An Comp tad vareetu ar daliitaaju. A varbuut, ja nelieto tiltu var taa - tranis atveraas||aizveraas uz visu pusperiodu un tad sanaak, ka up fronte ir viens zero cros un down fronte ir otrs zero cros. 
> Nu taa pielaagosanaas C radiitai nobiidei neliekas smuka 
> 
> 
>  tagad ir:
> 
> 
> 
> ...


 bij neparedzeetu iemeslu deelj jaatliek sitais pasaakums.
Bet tagad, kad atsaaku skatiities sito lietu, radaas paaris jautaajumi:
Ko veel es ieguustu iznemot izolaaciju un ekonomisku step-down regulatoru(ja pielikta slodze)? Max straavu taapat tachu nosaka balasts?
Ja nevajadzeetu to izolaaciju no 220V, tad tacu tik pat labi vienkaarsi to pirmo zeneru panemtu atbilstosu?

Un abos gadiijumos sanaak , ka, ja piemeeram man tas dimmeris ir sleep reziimaa(minimaala straava), tad baroklis vienalga eediis to max straavu?
Kaa vispaar sito risina komerciaalajos dimmeros?

----------


## kaspich

nu jaa, ja nevajag atsaisti, panjem vnk balasta C, tiltinju vai vinperioda taisngriezi, un viss..
nu, cik tas MCU pateerees nomodaa? 1..2mA? iisu palaishanas impulsu paketes [Ipeak=30mA] nu, veel 1..2mA?
neredzu iemeslu delj 4mA iet sleep modee.. ok, pat, ja barotaajs mociis 20mA cauri, tie ir ap 100mW, respektiivi, 10000 stundu jeb 500 dienu laikaa pateerinjsh 1kwh..

----------


## habitbraker

jaa, straava apmeeram taada.
labi paarliecinaaji - pie kaajas taatad tie 100mw  :: 
 bet izmantojot sitaadu - http://www.argus.lv/pub/datasheets/moc302x.pdf
konkreeti 23 versiju, sanaak, ka no mcu puses tikai 5mA jaadod, lai iesleegtu triaku?

----------


## habitbraker

http://ww1.microchip.com/downloads/en/A ... 00954A.pdf , 11. lpp -VOUT is not referenced to just line or neutral
making triac control impossible.

Bet, ja lieto to moc optotriaku starpaa?

----------


## habitbraker

labi, kautko uzbruuveeju:


kaadi ieteikumi?

----------


## kaspich

oo, nav ne vainas.
1. es bi neliktu atseviskju OPampu uz reset. paskati MCP100 un/vai MCP809 series. korekts treshold, aizture, mikropateerinjsh
2. virknee ar mcu 6. kaaju ieilktu kaadu 1k. tad kaadi statiskie trauceejumi/u.c. suudi nemeegjinaas izbliezt ieeju [un reizeem noreseto proci, 84f bija aktuaali]. kaut gan - Tev katraa in vadaa pa pretestibai.. nu, skaties. ja triac platee paredzeets tuvu, jeb ekspluataacija smagos apstaakljos [mitrums], tad var ielikt.
3. peec R1 ieliec kaadu 22nF uz 250V pret simistora 1.anodu, tad liidz gate veel vienu 100ohm, 2.anodaa virknee nelielu droseliiti. samazinaas trauceejumus vispakaart, droshi straadaas arii pie iisaaka vadiibas impulsa. ideaali jau buutu [jebkuraa gadiijumaa] starp anodiem ielikt kaadu simetrisko supresoru [600w, mazo] uz kaadiem 400V
4. R6 noteikti wirewound jeb vada/tiito

paarejais man patiik.  ::

----------


## JDat

Varbūt LM393 komparatora vietā reset ķēdē var lietot kādu reset mikreni. Tā sauktās supervisor mikrenes. Varētu samazināt diskrēto komponentu skaitu.
http://www.microchip.com/ParamChartS...g=en&pageId=79

Bet varbūt ka kļūdos...

----------


## M_J

Par resetu. Barošanā nelietoju 7805 bet L4949, kura nodrošina arī resetu. Bet arī tas vairāk ieraduma un dubultas drošibas dēļ. Kādreiz, darbojoties ar 16F84 bija gadījumi, kad barošanas sprieguma svārstības izpurgāja datus EEPROMā (automobilī, startēšanas brīdī ar švaku akumulatoru). Acīmredzot pie pazemināta sprieguma komandu skaitītājs kādā momentā pārleca uz neparedzētu vietu un nesankcionēti nokļuva tajā programmas apgabalā, kurā notiek ieraksts EEPROMā. Minētais L4949, nodrošinot korektu resetu, šādus defektus pilnīgi novērsa. Vēlāk iemācījos šo defektu novērst tīri ar programmistiskām metodēm, tomēr turpināju izmantot arī L4949. Tas pats, pārejot uz ATMEGām, kurām faktiski tik korekts ārējs resets nav nepieciešams, bet drošībai, lai paliek.
 p.s. EEPROMa datu nopurgāšanās ir diezgan bieži sastopama parādība automobiļos.

----------


## kaspich

savulaik meegjinaaju paljauties uz ieksheejo reset+wdt. beidzaas tas viss skumiigi..

ideaalaa scenaarijaa:
1. aareejs reset [ar histereezi, time delay]. tagad ar to nav probleemu. paardesmit santiimus maksaa..
2. PIRMS 7805 vai kaa tamliidziigs traniitis+stabilitrons+paaris pretestiibas. leetais komparators. kaa U zem kaadiem 9V [piemeeram], paartraukums uz B portu.
kaa paartraukums tajaa porta kaajaa, pabeidzam rakstiishanu eeprom, kaadu aareejas iekaartas apkalposhanu [baroshanai tik ilgi jaaizvelk - tas jaaparedz], ierakstam error bitu eeprom, un atrubiijam izejas/speka kjeedes. sekojam spanim. ja tas pazuud pavisam, peec nakoshaas iesleegshanas redzam iemeslu. ja tas atjaunojas, pagaidam laiku X, atsakam darbu, kraajas power_not_enough skaitu..

----------


## JDat

> Vēlāk iemācījos šo defektu novērst tīri ar programmistiskām metodēm, tomēr turpināju izmantot arī L4949.


 Interesanti... PAstāti par softiskiem trikiem ar EEPROM aizsardziibu uz PIC16F84.

----------


## Delfins

droši vien globāls mainīgais "now_we_are_writing_eeprom" un beigās resetojam.
Līdzīgi kā tas ir failu sistēmām, kad locko handli

----------


## kaspich

var, piemeeram, rakstiit 2X 2 dazhaados regjistros. ja peec restarta/on proceduuras abu saturs atskjiras, njem rezerves kopiju; var paarrakstiit apstiprinajumus par veiksmiigu record. visu ko jau var mudriit.. var crc rakstiit blakus regjistraa, ja atbilst - izmanto, ja nee - njem vecaaku saturu.. u.t.t.

delfiin - tas neatrisina probleemu, ja bija power down rakstiishanas laikaa  ::

----------


## Delfins

Nu aptuvena ideja jau bija  :: 
Vnk nedadomājos, ka reģistrā glabāk tas ir vēl feināk (priekš power-down). Sorry, newbie esmu  :: 

A kaut kāds autonomais āķis nepalīdz, kurš zibenīgi baro mikreni ja "raustās" elektrība? Nosauksim to par MCU-UPS

----------


## kaspich

> Nu aptuvena ideja jau bija 
> Vnk nedadomājos, ka reģistrā glabāk tas ir vēl feināk (priekš power-down). Sorry, newbie esmu 
> 
> A kaut kāds autonomais āķis nepalīdz, kurš zibenīgi baro mikreni ja "raustās" elektrība? Nosauksim to par MCU-UPS


 nu, njem veeraa, ka tam regjistram arii jaabuut eeprom tipa. savukaart, eeprom ierakstu reizhu skaits ir ierobezhots, rakstiishana ir ljoti leena, jaadarbojas ar apstiprinajumiem, paarbaudeem.
par baroshanas akjisha teemu jau rakstiiju: PIRMS stabilizatora atbilstosh C, tam voltage kontrole. tur Amerika vairs nav jaaizgudro  ::

----------


## Vikings

> A kaut kāds autonomais āķis nepalīdz, kurš zibenīgi baro mikreni ja "raustās" elektrība? Nosauksim to par MCU-UPS


 Tas ir sarežģītāk kā, piemēram, datus glabāt vairākās kopijās. Rēķini, ka aķa mūžs parasti ir mazāks par pašas elektronikas mūžu, kas rada leikas problēmas ar apkalpošanu.

----------


## kaspich

ar to eeprom jau vispaar taa.. ne paaraak perfekti.
rakstiishanas skaits ierobezhots. no taada aspekta darba laikaa vispareizaak buutu datus tikai uzkraat, bet rakstiishanu veikt peec usera/kaada iipasha notikuma pieprasiijuma, vai arii power_down situaacijaas [peec taa Uc detekta partraukuma izsaucam eeprom ieraksta subprogrammu]. ja nu bail pazaudet kaadus svarigus datus - rakstam peec iespeejas reti. nu, piemeeram, ja laadeejam akji, skaitam Ah, un precizitaatei/kluudai jaabuut ne lielaakai kaa 0.1Ah, tad tik biezhi arii rakstam - ik peec 0.1Ah.
ja jaaizmanto rakjeshu tehnikaa, kur vajag superdroshiibu, un ar 1 regjistra formaalo muuzhu var buut par iisu [24h darbs, piem. 20 gadus online], tad vienaa regjistraa saturam pointer uz iisto ieraksta regjistru. pointer ik peec XX ierakstiem maina datu regjistra adresi. te gan viss jadara po naucnomu:
vispirms upgreidojam jauno regjistru, tad nomainam pointeri, tad dzesham veco [ja vajag]. tb, ja kas nobruka, nav katastrofaali, zaudeejaam tikai peedeejo veertiibu..

----------


## M_J

Es izveidoju vairākus mehānismus: neveicu ierakstu, ja kopš barošanas ieslēgšanas (vai reseta) nav pagājušas vismaz 10 sekundes, datus dublēju 3 vietās EEPROMā un pirms ieraksta iztaisu pauzīti. Pauzītes iztaisīšana izpaužas sekojoši: ielieku Ierakstāmo datu baitu, un adresi iekš EEDATA un EEADR, bet vēl nesteidzos ierakstīt. Šo divu baitu kopijas saglabāju divos reģistros. Vēl vienā reģistrā ierakstu skaitli, piemēram 77, kurš nozīmē, ka būs jāveic ieraksts pirmajāa EEPROM apgabalā. Pēc laiciņa (manā gadījumā tās bija 20 milisekundes) salīdzinu šo reģistru saturu. Ja EEDATA EEADR vērtības sakrīt ar attiecīgo kopiju reģistru saturu un trešajā reģistrā vēl joprojām ir 77, veicu ierakstu, ja ne, tad šajā vietā programmas skaitītājs ir nonācis kļūdas rezultātā un ieraksts tiek atcelts. Pēc ieraksta kopiju reģistrus nonullēju. Protams, ja programmas skaitītājs kļūdas rezultātā trāpa uz komandu, kas seko pēc šīs pārbaudes, EEPROMā var tikt ierakstītas muļķības. Bet priekš tam ir datu dublēšana trijās vietās.

----------


## kaspich

> Es izveidoju vairākus mehānismus: neveicu ierakstu, ja kopš barošanas ieslēgšanas (vai reseta) nav pagājušas vismaz 10 sekundes, datus dublēju 3 vietās EEPROMā un pirms ieraksta iztaisu pauzīti. Pauzītes iztaisīšana izpaužas sekojoši: ielieku Ierakstāmo datu baitu, un adresi iekš EEDATA un EEADR, bet vēl nesteidzos ierakstīt. Šo divu baitu kopijas saglabāju divos reģistros. Vēl vienā reģistrā ierakstu skaitli, piemēram 77, kurš nozīmē, ka būs jāveic ieraksts pirmajāa EEPROM apgabalā. Pēc laiciņa (manā gadījumā tās bija 20 milisekundes) salīdzinu šo reģistru saturu. Ja EEDATA EEADR vērtības sakrīt ar attiecīgo kopiju reģistru saturu un trešajā reģistrā vēl joprojām ir 77, veicu ierakstu, ja ne, tad šajā vietā programmas skaitītājs ir nonācis kļūdas rezultātā un ieraksts tiek atcelts. Pēc ieraksta kopiju reģistrus nonullēju. Protams, ja programmas skaitītājs kļūdas rezultātā trāpa uz komandu, kas seko pēc šīs pārbaudes, EEPROMā var tikt ierakstītas muļķības. Bet priekš tam ir datu dublēšana trijās vietās.


 pag, Tu taapat neatrisini probleemu, ja tieshi rakstiishanas briidii [kritiskaa lieta] pazuud elektriiba.
redz, regjistru [lokaalo] modificeeshana ir aatrs process, un ar 99.9999% probabilitaati: vai nu baroshana nobruks pirms, vai peec to modificeeshanas, bet ne to laikaa.
programcountera nobrukshanu ir/buutu jaanoveersh supervizor - reset menedzmentam. katraa zinjaa, mcu ir jaabuut darbaspeejiigam ar zemaaku spriegumu, kaa nostraadaa reset IC.

----------


## M_J

Protams, situāciju, kad rakstīšanas brīdī pazūd elektrība, es šādi neatrisinu. Tas arī nebija mans mērķis, jo vērtības, kas tika ierakstītas EEPROMā bija ierīces iestādījumi, kas tiek mainīti varbūt dažas reizes ierīces mūža laikā. Šādi es atrisinu tikai to, ka pēc sprieguma nosvārstīšanās šie uzstādījumi nenojūk supervizor - reset menedžmenta neesamības vai nekorektas darbības dēļ. Pēc korekta ārējā reseta piekarināšanas problēma ar uzstādījumu nojukšanu izbeidzās. Pēc problēmas atrisināšanas gribējās pamēģināt, vai var kļūdu, kas radusies shēmas aplamības dēļ, izlabot ar programmiskiem līdzekļiem.

----------


## kaspich

nu, ar tieshi taadiem pat panaakumiem var vnk laiku X nedariit neko, vnk staaveet uz vietas.
jo, ja bruks, tad bruks arii comancounter u.c. lietas. savukaart, ja procis buus darba kaartiibaa, ierakstiisi..
tad taadai paarbaudei vispaar pazuud jeega..

taapeec jau ir tas iebuuveetais mehaanisms ar 2 konstanshu paarrakstiishanu, lai nejaushi [nobrukshanas gadiijumaa] kaut ko kaut kur neierakstiitu. iisi - FAIL :P


par to softisko laboshanu - record laikaa baroshanas nobrukshanu var konkroleet TIKAI hardwariski. ja to dara - taalaak jau softiski var uztaisiit [shaja posmaa] droshu risinaajumu..

----------


## kaspich

luuk, par ko es murgojos.

taatad, normaalaa darbaa 2200.0 pirms 7805 ir uzlaadets uz 15V; 
briidii, kad AC pazuud, tas kondensators izlaadejas un sasniedz 10.5V, kaa tas notiek, aizveras tranzistors un uz taa C paraadaa fronte 0/5
no shii briizha mums ir garanteetais laiks X, kameer C izlaadesies liidz 7V uz saaks krist mcu baroshana.

garanteeto laiku X obligaati janomeera [jaaizrekjina] pie max pateerinja [to izdariit nav probleemu] un tam jaabuut ilgaakam [ar rezervi, vismaz 2..3 reizes] kaa veicamo operaaciju ilgums shajaa/aarkaartas situaacijaa.

sho te liimenja kontroli int hierarhijaa liekam ar augstaako prioritaati, kontroleejam gan state mainju, gan level [inicializeejot/attiirot paartraukuma regjistrus].
respektiivi - sho no 04h kaa pirmo atzaru uz saglabaashanas subprogrammu.

* p.s. datasheet jaaskataas, kaads ir minimaalais frontes staavums, pie kura garanteeta shii state change piefikseeshana/uzstaadiishana. ja in nevar uzstaadiit kaa Schmitt trigeru un/vai tas aatrums ir defineets/noteikts, starp tranja C un mcu porta ieeju OBLIGAATI jaliek Schmitt triggers [to var samudriit uz 2 elementiem ar pozitiivu atpakaljsaiti, var atveeleet veel vienu tranzistoru, var kaadu komparatorinju ar pozitiivu atpakaljsaiti atveeleet].*

----------


## kaspich

ja konkreti par 84f [shii lieta ir aktuaala daudziem, ne tikai shim mcu].

skatamies datasheet, kaads ir MINIMAALAIS U pieauguma aatrums starta briidii, pie kaada vispaar nostraadaa ieksheejais reset.
ja mcu baro no AC caur balasta C, vai kaadu citu mazstraavas baroshanas avotu [kaa rezultaataa mcu baroshana uzaug leenaam, ieskaitot - baterijas, piem.] - OBLIGAATI jaalieto aareejais supervaizors/reset IC.

mcu shaadaa [U leenas pieaugsanas] gadiijumaa zaudee JEBKAADU sajeegu - vinjam pat neuzstaadaas config biti, neiesleedzas wdt, porti peeksnji var buut kaa IZEJAS ar JEBKAADU out staavokli. no shii ir jaauzmanas.

reset supervizoram jaapieveersh uzmaniiba - vai nav nenoteiktu/nekorektu staavoklju pie maziem/ljoti maziem baroshanas spriegumiem.
ja taa ir, tad baroshanas U pieaugot, var buut taa, ka pirmais starteejas PIC [ja, piem., vinsjh darbojas jau no 2V, bet reaali - jau pat no 1.5, piemeram], reset staavoklis ir pasiivs, mcu uzkaraas, sataisa ziepes, baroshanas u turpina augt, tikai tad reset IC noreseto mcu.. tb, visam - reset, procim, perifeerijai korekti jaadarbojas arii tad, ja baroshana ir zem normas un/vai mcu nav inicializeets [un taa izejas = Z staavoklii].

----------


## next

Pirmkaart vajag aizmirst par F84.
Sen jau pieejami mcu ar iebuuveetu BOD un daudzveidiigu perifeeriju.
Pirms katra eeprom ieraksta var paarbaudiit baroshanas spriegumu un zinaat vai kondensatoraa pietiek energjijas ieraksta veikshanai.
Piemeeram taa:

----------


## kaspich

nav jau principiaalas starpiibas, vai tas ir 84, vai kaads cits. tendences/pamatlietas vienas un taas pashas.
nu, njaa. profesionaals risinaajums.. ja nav nosleepums, kur taadus iesaka?

----------


## M_J

Kaspič, L4949 jau ir iebūvēts shēmas fragments ar tām funkcijām, kas ir Tavā shēmā. Tas ir viens no iemesliem, kāpēc to lietoju. Protams, nav korekti ar softiskām metodēm risināt nekorekti būvētas shēmas problēmas. Bet ne par to ir šis stāsts. Mani ieinteresēja pats mehānisms, kā, notiek šis process, kad, nosvārstoties barošanai, kaut kur EEPROMā nomainās kāds baits situācijā, kad nav korekta reseta. Tāpēc veicu dažus eksperimentus. Un izrādās - ja programmā nekur nav tās komandu virknītes, kura ieraksta kaut ko EEPROMā - varam darīt ar barošanu ko gribam, EEPROMā nekas nemainās. Tiklīdz programmā kaut kur, pie kaut kādu nosacījumu izpildes paredzam ierakstu EEPROMā, raustot barošanu, dati EEPROMā sāk mainīties. Pat tad, ja normālā programmas darbības gaitā nekur nav paredzēts ieraksts EEPROMā. Izdarīju tā: uzrakstīju komandu virkni, kura beidzas ar ierakstu EEPROMā, bet nekur programmā neparedzēju pāradresāciju uz jebkādu adresi šajā komandu virknē. Un šeit sāka parādīties sakarība - jo vairāk adrešu atmiņā aizņem šī komandu virkne, kas beidzas ar ierakstu EEPROMā, jo intensīvāk sāk mainīties dati EEPROMā, raustot barošanu. Ja komandu skaitītājs kļūdas pēc trāpa uz jebkuru adresi šajā rindā, tas beidzas ar ierakstu EEPROMā. Un, jo vairāk vietas atmiņā aizņem šī rinda, jo lielāka varbūtība, ka komandu skaitītājs kļūdas rezultātā uz kādu šīs rindas adresi trāpīs. Ja rindas sākumā uzdodu nosacījumu, bet rindas beigās, tieši pirms ieraksta EEPROMā, ielieku šī nosacījuma pārbaudi, vairs nepietiek kļūdas dēļ trāpīt uz jebkuru komandu šajā rindā, lai notiktu ieraksts EEPROMā. Tagad, lai notiktu ieraksts EEPROMā ir vai nu jātrāpa uz rindas sākumu, vai uz nākošo komandu pēc nosacījuma izpildes pārbaudes, vai nejaušības dēļ ir jāizpildās nosacījumam. Līdz ar to programmas skaitītāja kļūdu izraisīto ierakstu biežums EEPROMā būtiski samazinās, ko arī varēju novērot. Tas - īsi par softisku metodi kļūdainu ierakstu mazināšanai EEPROMā. Lietoju komplektā ar L4949. Jo visu cieņu dzelžiskiem risinājumiem bet svarīgos gadījumos lieka piesardzība neskādē. Cenšos mācīties ne tikai no savām, bet arī citu kļūdām. Vēl joprojām neviens nav skaidri pateicis, kāpēc tik bieži sastopami, piemēram, nerūcoši MB Sprinter, ar uzrakstu "Start error" panelī un izpurgātu EEPROM motora ECU.

----------


## RobinDAB

Man tā domāt, ka Tu ne līdz galam izproti problemātiku.
Visa pasākuma sāls ir tajā, ka ierakstam EEPROM vajadzīgs zināms laiks... Un stabila barošana šaja laikā.
Risinājums - sensitīvi dati tiek glabāti 3 atkārtojumos, kontrolsummas, pārmaiņus ierakstīšana...
Vārdu sakot - dublēšana un kļūdu korekcija.
Bez variantiem.

PC Tavā gadījumā diez vai ir pie vainas, ja vien netiek lietots kaut kāds aizvēsturisks MCU. Drīzāk nepareiza konfigurācija vai šķībi uzrakstīts softs.




> Vēl joprojām neviens nav skaidri pateicis, kāpēc tik bieži sastopami, piemēram, nerūcoši MB Sprinter, ar uzrakstu "Start error" panelī un izpurgātu EEPROM motora ECU.


 gribi zināt atbildi?
Ne jau EEPROM konkrētajos gadījumos ir pie vainas...
95% - komunikāciju kļūdas. Kosjaki uz CAN piemēram.
Un START ERROR nebūt nenozīmē, ka uzreiz ir jāklūp tam visam virsū ar programmatoriem un jābīda šausmīgā zinātne.
Principā - tas nozīmē tikai un vienīgi to, kā tulkojās. T.i. PROBLĒMAS AR IEDARBINĀšANU.

----------


## kaspich

+1

mj, redz, sho mos mcu uzbuvee ir viena iipatniba - gandriiz pazuudot baroshanai [reizeem pat - uz laiku lidz 0.X sekundeem] regjistru saturs var saglabaaties. un saglabaajas. jaa, kaa raada prakse, biezahak bruuk nost specpieleitojuma regjistri, like comandu counters, statusa rgjistrs, kas tik veel ne.

par L4949 - vinjai NAV to lietu, par kuraam runaaju es. luudzu, apskati 5, ja vajag, 55 reizes, manu sheeminju!!!!! NAV.

----------


## M_J

Jauki, beidzot man ir iespēja pastrīdēties ar Kaspiču! Par L4949. Ir viņā ne tikai reseta ķēde, bet arī lieta, las saucās "voltage sense comparator". Spriegums ieejā SI tiek salīdzināts ar 1.23V referenci. Atkarībā no rezultāta tiek atvērts vai aizvērts tranzistors, kura kolektors pieslēgts izejai SO. Izvēloties ieejā attiecīgu sprieguma dalītāju, izvēlamies spriegumu pie kura shēmas izejā līmenis mainīsies uz pretējo. Kāda ir principiāla atšķirība no Tavas shēmas?
 p. s. par nelecošiem mercedesiem kaut kad vēlāk, šobrīd nav vaļas - kārtējais nelecošais mercedess

----------


## kaspich

super! nu, beidzot! ja veel Tu buutu iemetis bloksheemu, es buutu vnk laimiigs!  :: 


reku ir: reset ar aizturi.
un so/si modulis, ar Schmitt trigera izeju  ::  taatad, ar pareizaam fronteem. SO uz paartaukumu! tad buus droshiiba.

----------


## M_J

Mazliet par tiem nelecošajiem mercedesiem. Protams, ir miljons iemeslu, kāpēc tie nelec, bet ne jau visos gadījumos panelī deg "Start error". Es šeit runāju tieši par gadījumu, kad visas barošanas un CANi ir kārtībā, datu apmaiņa notiek, tomēr "Startfreigābe" ir pozīcijā "nein". Es ar programmatoru tur iekšā nelienu, nekādu zinātni tur nesaskatu, drīzāk taustīšanos pa tumšu, grabažām piekrautu telpu. Labi, ka ir cilvēki, kas ir uztaustījuši sakarības un māk salikt baitus tā, ka auto atkal rūc. Kā viņi pie tā nonākuši, varu tikai minēt. Bet es ne par to, kā salikt atpakaļ nojukušos baitus, bet par to, kāpēc tie vispār nojūk, un salīdzinoši bieži. Nu labi, vienu daļu gadījumu varētu norakstīt uz EEPROMu defektiem. Bet vairumā gadījumu EEPROMiem nav ne vainas. Pēc atmiņas restaurēšanas auto brauc ilgi un laimīgi. Palieku pie domas, ka galvenā problēma ir softā, kas varbūt reizi no desmittūktoš reizēm veic ierakstu EEPROMā, kad to nevajadzētu darīt. Varbūt arī shemotehnikā. Bet tie ir tikai minējumi, kurus varētu apstiprināt vai noliegt ja būtu iespēja tikt pie softa izejas failiem un ECU pilnas shēmas. Ne viens, ne otrs nav reāls pasākums, un ar to mana interese arī beidzas. Vienīgais - izmantot to kā mācību, lai šādas lietas nenotiktu manās konstrukcijās. Galu galā var jau būt traucējumi CAN līnijās, barošanas pulsācijas, auto vispār ir viens traucējumu midzenis, bet tas nedrīkstētu novest pie tā, ka procesors ieraksta atmiņā nesakarīgus datus.

----------


## kaspich

peec manas izpratnes:
taadaa DME/DDE vispaar noturiibai buutu jaabuut taadai, ka vnk negadaas taadas situaacijas. ok, es saprotu, tie bloki [pashi] raksta adapteeshanas datus.
bet, tad tie [dati] nedriiksteetu buut aarpus robezhaam, pie kuram fail iestajas. kontrole gan pashaa eeprom, gan talaak - karshu lasiishanas algoritmos.
man ir aizdoma, ka shaadi briinumi, galvenokaart, ir deelj security lietam. razhotaaji meegjina sleept eeprom saturu, komunikaaciju pa can, dme/dde sleepj nobraukumu kopijas, kodus apmainjai ar ews, u.t.t. paarmudriijushi..
bmw vieniigais variants, kad dme/dde nomirst, ir tieshi komunikaacijas lazhas ar ews [imobilaizera moduli]. tad tikai ar gt1 [vai hakeru riikiem] - piekodejam ews atpakalj.. shis gan gadaas pie mirstosha akja.. auto uz evakuatora un uz specializeetu servisu prom  ::

----------


## RobinDAB

> ok, es saprotu, tie bloki [pashi] raksta adapteeshanas datus.
> bet, tad tie [dati] nedriiksteetu buut aarpus robezhaam, pie kuram fail iestajas


 1) adaptācijas - pie vienas vietas. Nobruka - pieadaptēsies no jauna. Vnk tam ir vajadzīgs laiks. Un tas nu nekādi nevelk uz kaut ko sensitīvu. 
2) viss tas, kas ir būtisks, bet mainīgs (t.i. tiek pārrakstīts ON/OFF cikla laikā) - visur tiek dublēts, čekots un verificēts. 



> man ir aizdoma, ka shaadi briinumi, galvenokaart, ir deelj security lietam.


 Right. Jo patiesībā rollings ir tas, kas VIENMĒR mainās un tiek pārrakstīts. OK, ir jau pietiekami gudri tās lietas uztaisītas, taču aiz vecuma kondensatori piemēram sāk sēsties, un rodas problēmas. 
Kā nākama opcija - jebkuram EPROM ir garantētais pārrakstīšanas reižu skaits, kā arī garantētais informācijas glabāšanas laiks (savulaik РФ2 ultralillā manuālī bija rakstīts = 1 mēnesis!  ::  - puikas vnk bija autā....)
Un viss tas, kas brūk, ir pārsvarā pagājušais gadsimts.



> razhotaaji meegjina sleept eeprom saturu, komunikaaciju pa can, dme/dde sleepj nobraukumu kopijas, kodus apmainjai ar ews, u.t.t. paarmudriijushi..


 Starp citu - neslēpj... Gribētu šausmīgi noslēpt, tad tā arī darītu. Vnk reverss nav īpaši pateicīga nodarbe.
Ziepe ir citur.
Pirmais šatls uzgāja gaisā ar 256k. Visam pietika!
Abet programmētāji.... Principā, ja sāk pierakstīt statusus ar string - "    valid" vai "not valid" tā vietā lai čekotu 1 bitu... Un rakstīt softu matkadā - nu tad viss arī ir tur kur ir un procis vienmēr būs par knapu un atmiņa par mazu.

----------


## habitbraker

Lielais paldies par inf. Pieliku tos rezistorus un L. Peec datasheet
Tomeer neliksu nekaadas spec. reset mikrenes, jo man galvenais ir tikai, lai taa iesleegsanaas buutu momentaa.Sheema arii uzreiz garlaiciiga - ja piemeeram liek to 4949. eeprom neizmantoju, taapeec taas fiichas man nevajag, bet liksu aiz auss visu.  :: 
Pasu PIC jau notesteeju ar trafu barkli un zerocross- viss sancee. PICa kodam jaunas fiicas nevaru atlauties - praktiski izsmelti resursi, toties nekaadu drebeesanu uztversanas laikaa utt...
Laikam jaapaariet pilniibaa uz AVR - praktiski visos aspektos ieliek picam. Iemesls, kaapeec ar pic veel chakareejos, ir taapeec, ka nopirkts programators vinam.
kopumaa:

----------


## kaspich

neefektiivs kods  :: 
pag, nejauc mushas ar kotleteem. 
PIC ir RISC arhitektuuras paraugs, un, manupraat, paaraaks realtime aplikaacijaam. tas, kas vilina Atmel piekriteejus - savietojamiiba [kodaa, lielaa meeraa] sakot no 8051 mcu, kuriem savulaik bija chupa visaadu matemaatiku saakstiitas.
Microchip ir ntie simti dazhaadu mcu, 6/16/32 bit, DSP [30, 33 series, tiem gan komandu sisteema cita]. procis nje prichom. njem tak jaudiigaaku PIC un viss.

bet, kaa jau teicu, 1K komandu bez papildus funkcijaam - neracionaali  ::  ar to arii atskjiras kruts programmeetaajs no iesaaceeja - pat, ja softs dara to pashu, tas ir 5X iisaaks, 5X aatraaks.

----------


## habitbraker

Nu saliidzini piemeeram 16f84 un tiny2313
Par to pasu cenu avr ir jaudiigaakas/vIRAAK INTRUKCIJU
veelviens taimeris
krutaaka interupt sisteema  - ar autmaatiskaam prioritaateem
instrukcijas pildaas ar reaalu clck speed.
lielaaka atmina 
visaadas papildiekaartas - usart, bor  un dafiga veel..  tagad visu neatceros.

----------


## kaspich

> Nu saliidzini piemeeram 16f84 un tiny2313
> Par to pasu cenu avr ir jaudiigaakas/vIRAAK INTRUKCIJU
> veelviens taimeris
> krutaaka interupt sisteema  - ar autmaatiskaam prioritaateem
> instrukcijas pildaas ar reaalu clck speed.
> lielaaka atmina 
> visaadas papildiekaartas - usart, bor  un dafiga veel..  tagad visu neatceros.


 
pag, f84 ir pats vecaakais/pirmais ar flash eeprom, tika saakts razhot ash pirms gadiem 15.

par instrukcijaam - FAIL. nevar taa tupa saliidzinaat risc un cisc prochu instrukcijas. RISC taadu instrukciju kombinaaciju uz airaak, instrukciju sisteema ir universaala.
par izpides aatrumu. ok, paskati tikai, cik instrukcijas izpilda taads cisc sarezgjitakos gadiijumos. risc vajag 1, 2 bija nosaciitaam paarejaam, un veel paaris nestandarta situaacijaam.

paartraukumi? a Tu iemaacies ar shaadiem resursiem straadaat. a to velk uz edza pusi. skataas uz super A klasi, a 2polaaru baroshanu nepaziist..
iemaaciisies ar sho, paarej kaut uz 18 series, tur resursu vnk woow.

cenas? nez, man skjiet tas pats. esmu suutiijis no Microsoft weba, farnelaa arii var suutiit..

RISC prochi [peec mana skatiijuma] ir galvastiesu paaraaki. un man subjektiivi piedur kaut savulaik esmu iepazisies gan ar Z80, gan visku ar 8051, 8080, u.t.t.]..

----------


## kaspich

http://www.microchip.com/ParamChartSear ... &pageId=74

nu, reku, piem.

256eeprom
4k ram
8k rom
4+taimeri
64mhz
usart, spi, i2c
self write
adc, dac, pwm

njem, ko velies.. cenas? 1..2..3usd. ok, pa vienam sanaak bisku daargaak..

----------


## habitbraker

Nu es sliidzinu ko par to pasu cenu klaat ieguustu.
Zinu, esmu programeejis tikai 2 mcu - 16f84 un attiny2313.
Nu varbuut gadu starpiiba, bet pasaki, kur saakas tas PIC paaraakums? (vienaa cenu kategorijaa) Varbuut paardomaaju.
Un kapeec 2313 rakstiits risc?

Tie 18fxx tachu daargi. rekur pa ls 3.3 - http://www.argus.lv/pub/datasheets/ATMEGA16_summary.pdf

----------


## kaspich

http://lv.farnell.com/jsp/search/browse ... %2B1004406

18 series ceeena 1.5...2 LVL.. tas ir daargi?
sore, programmeet vajag macet! es neesmu profesionaals programmeetaajs, bet sore [jau rakstiiju] - man  84f bez taa, ko dara Taveejais softs, uztveera 250kbodu datus, izceela aaraa, analizeja to kljuudas, komuniceja ar otru proci, indiceeja 4 indiktorus, bija 3 liimenju menu [kopaa ap 20 menu logu], indikatoriem bija savs 'alfabeets', rakstiija settingus eeprom, u.c. lietas dariija..

nee, es nemeegjinaashu pierunaat.. es nezinu, kas/kur rakstiits. es skatos peec arhitektuuras, peec komandsistemas pieraksta. varbuut es neko nezinu apr aatiny. bet es zinu to, ka speeciiga programmeetaja rokaas Microchip ir AFIGETJ ierocis. 

nez, manaa  izpratnee no tada 18series var kosmosa kugji uztaisit. dajebko.. ja tads maksa 1.5 LVL [caur Farnell].. nu, vnk bez komentiem..

----------


## kaspich

> Nu es sliidzinu ko par to pasu cenu klaat ieguustu.
> Zinu, esmu programeejis tikai 2 mcu - 16f84 un attiny2313.
> Nu varbuut gadu starpiiba, bet pasaki, kur saakas tas PIC paaraakums? (vienaa cenu kategorijaa) Varbuut paardomaaju.
> Un kapeec 2313 rakstiits risc?
> 
> Tie 18fxx tachu daargi. rekur pa ls 3.3 - http://www.argus.lv/pub/datasheets/ATMEGA16_summary.pdf


 redzi vaardu Advanced??????
tas nav tipisks RISC. skati literatuuru, aks ir RISC, CISC.

taas instrukcijas ir mega efektiivas liidz briidim, kameer mainiigos Tev vajag iebaazt konkretos regjistros. un peec tam savakt. 

PIC, piemeeram, viss ram ir regjistri, ar kuriem var opereeties. jaa, viens mainigais jaaiebazh W, bet, ja maak efektiivi programmeet [izmantot visas netieshaas adresaacijas iespejas] - es domaaju, var efektiivaak. lai Atmel netuziasti pareekjina :P

nu? 16mil alja instrukcijas..  kaa paraadaas paarejas, nosacijumi - 2 komandas.. tb, maarketinga triks..

piedevaam, 40 komandas [universaalas] ir daudz vienkaarshak atcereties kaa 130 ar ierobezhojumiem/nosacijumiem..
bet, var jau buut, ka es esmu diivains :P


paskat, subprogrammu izsaukshana/atgrieshanaas: 2/3/4 instrukcijas
skipi, ja kontrole bitus: 1/2/3
load/store - 2
tur vismaz pusei kombinaaciju ir 2 vai vairaak ciklu.. un, piedevaam, visu laiku jaareekjina liidz, kad bus 1, a kad 2 cikli..

----------


## habitbraker

tas ir leeti  :: 
Par kodu - ir tacu atskiriiba, vai jaadara lietas reizee(jaaveido signaals triakam/aizture,impulsa platums,  reizee jaagaida/jauztver IR komanda, jaatpaziist) vai peec kaartas. 
Liidz tam ko tu aprakstiiji man veel augt. Liidz pro veel taalu, kur nu ar tevi veel saliidzinaat  ::

----------


## kaspich

http://lv.farnell.com/jsp/search/browse ... %2B1004406

nu, es redzu [peec pirma acu uzmetiena], ka Atmega 16 series ceenas ir skot no 2 LVL, bet pamataa ap 3..4 LVL... nee?
piedevaam, piedaavajums nesalidzinaami nabadziigaaks kaa Microchip..

----------


## habitbraker

Nu sanaak, ka taas instrukcijas ir ar nsaciijumiem. Bet kods liidz ar to ir iisaaks.
Jaa PIC man patiik, ka var viegli dariit lietas piemeeram ar PC. AVR taa nevar.

----------


## kaspich

> tas ir leeti 
> Par kodu - ir tacu atskiriiba, vai jaadara lietas reizee(jaaveido signaals triakam/aizture,impulsa platums,  reizee jaagaida/jauztver IR komanda, jaatpaziist) vai peec kaartas. 
> Liidz tam ko tu aprakstiiji man veel augt. Liidz pro veel taalu, kur nu ar tevi veel saliidzinaat


 pag, pag, man taas lietas dariija vienlaiciigi. neviens tachu nepasaka in datiem - stoooop. tagad mees ziimeesim indikaaciju..  :: 
es saku, es neesmu pro programmeetaajs. bet staasts - ja gribi augt, nerausties starp platformaam. neizmanto nezheeliigus resursus. 
Tev tachu tai IR, cik bija? 1..2kbod? vot, paprovee 250kbod. ar to pashu proci. liec klaat indikatorus, kas raada, cik% spilgtums ir izejaa, kas raada frekvenci, nobiidi no ideaalaas, kas meera Uavg vai Upeak. un visu to - 1k atminjaa.

----------


## JDat

Paga gan AVR 8-bit gan PIC16F.. abi principā ir RISC. Jā, AVR ir vairāk komandu. Nu un tad? Katram savi plusi un mīnusi. Neticu ka tavai konstrukcijai nepietiek PICa atmiņas. Kodu studijā, ja nav militārais noslēpums.

PS: Vikings man pielaida FPGA sēru.  ::  Tagad es būšu EPIS  ::  Laikam ar PICiem būs vēl mazāk laika padarboties šobrīd, jo kādu brīdi padarbošos ar citām lietām.

Kaspich noteikti norādīs kur tavā kodā neracionalas lietas.

Davai, turas tauta.  ::

----------


## kaspich

> Nu sanaak, ka taas instrukcijas ir ar nsaciijumiem. Bet kods liidz ar to ir iisaaks.
> Jaa PIC man patiik, ka var viegli dariit lietas piemeeram ar PC. AVR taa nevar.


 kods jau ir tikai pieraksts. Tu jau vari izveidot komandu Chabit valodaa IBSTSR2TAI [if bit set then shift rigt 2 times and invert], kas izpildaas 2/3/5/6/7 ciklus.
it kaa buusi ieekonomeejis 4 rindinjas, bet kods - murgs, izpildes laiks.. hvz..

nee, ok, ja programmee c, un nav realtime aplikaacijas, tad ok - avr, vai kas cits.
bet, taa kaa PIC perfotmee ASM un reaalaa laika sistemaas.. nu, nepiedur man avr. piedodiet..

----------


## kaspich

> Paga gan AVR 8-bit gan PIC16F.. abi principā ir RISC. Jā, AVR ir vairāk komandu. Nu un tad? Katram savi plusi un mīnusi. Neticu ka tavai konstrukcijai nepietiek PICa atmiņas. Kodu studijā, ja nav militārais noslēpums.
> 
> PS: Vikings man pielaida FPGA sēru.  Tagad es būšu EPIS  Laikam ar PICiem būs vēl mazāk laika padarboties šobrīd, jo kādu brīdi padarbošos ar citām lietām.
> 
> Kaspich noteikti norādīs kur tavā kodā neracionalas lietas.
> 
> Davai, turas tauta.


 viena no risc pamatnostaadenem ir:

minimaals skaits iisu, universaalu, viena cikla komandu komandsisteema. jau shim cauri neiet avr. taapeec arii ir: Advanced. jo RISC peec buutiibas ir inovativaaka/perspektiivaaka arhitektuura, tad nu avr 'pievelkaas'.
es varu sadereet da uz jebko, ka taas 133 komandas tiek izmantotas vismaz 3X neefektivaak kaa 40 RISC komandas  ::  taapeec jau RISC tika izstradaats - tika pieraadiits, ka pat speejiigakie programmeetaaji izmanto 20..30 sev miiljaakaas komandas. 
rezultaataa - kods ne tuvu ne optimaals..

----------


## habitbraker

Nu man taads staasts - pats izdomaaju ar PIC programeet,  bet skolaa saaka maaciit ar avr. Nejau es speciaal mekleeju kautkaadus krutakus un leetaakus prochus, itkaa man nebuutu gana ar to pasu pic. Uzskatu, ka veel daudz prgrameesu ar to pasu f84. Vienkaarsi taapec radaas iespeeja saliidzinaaat.

Indikatoru?  ::   :: ..... hmmm

----------


## Delfins

Kods jau ir tikai daļa, vispirms pareizi HW jāizmanto + viltīgos paņēmienus, ja tādi ir.

PS: atkal topikā fleims sākās, kuram garāks  ::

----------


## habitbraker

nu 84a ar to hw ir kaa ir.
Kods nav militars nosleepums  ::  . Bet krus grib lasiit sveshu asm kodu? Ielikt? Varbuut kaads ieteikums noder...

----------


## kaspich

> Nu man taads staasts - pats izdomaaju ar PIC programeet,  bet skolaa saaka maaciit ar avr. Nejau es speciaal mekleeju kautkaadus krutakus un leetaakus prochus, itkaa man nebuutu gana ar to pasu pic. Uzskatu, ka veel daudz prgrameesu ar to pasu f84. Vienkaarsi taapec radaas iespeeja saliidzinaaat.
> 
> Indikatoru?  ..... hmmm


 nu bet super! ja visi programmee avr, Tu - PIC, ekselenti. Tev ir visas iespeejas paraadiit, ko PIC prot  :: 

Delfiin, ja Tu par mani - man ir pavisam suudiigi visas jomaas. arii programmeeshanas joma. taapeec arii aicinu - vechi, programmeejiet! shodien 250kbodi, riit - 500kbodi. un es dzilji paklaniishos!

----------


## JDat

> nu, nepiedur man avr. piedodiet..


 Nav tik traki. Ja raksta AVR ar ASM, tad nav milzīga šķirbība. Arī tur var realtime uzrakstīt.
Kas līdzigs ar PIC? Idejisi tas pats.
Kas ātšķirīgs?
AVR "mazāk" RAM. Tobiš pa tiešo pieejami 32 registi, PICam visa atmiņa. Ar AVR RAM jāstrādā caur reģistriem. Man kā iesācējam bišku jāpacakarējas.
AVR tā sautko "IF" varintu ir daudz vairāk. Var izlaist izntrukciju ja bits ir uzstādīts, ja nomests utt. Vesela kaudze. PICam tikai viens variants bija, ja pareizi atceros. PICā biku jāpiedomā pie "IF" organizēšanas.
AVRā var uzreiz strādāt ar reģistiem. PICā jāčakarējas ar W reģistru.
AVR katram IRQ ir savs vektors. PICam viss organizēts cair vienu IRQ vektoru un IRQ reģistra lasīšanu. Biku čakars.
AVR ir "bezgalīgs" (cik ram ļauj) stack. PICam dzelzisks 7 līmeņi. Tas nozīmē ka PICā apak'programma var izsaukt citu apakšprogrammu 7 līmeņu dziļumā (maz, bet man pietiek). AVR cik vajag (cik RAM ļauj). Tā brutāli salīdzinot.

Da nav slikts ne PIC ne AVR. Katram savi plusi un mīnusi. Kāds var vēl kaut ko pielkt klāt, bet netaisam diskusiju AVR vs PIC. Katram savi plusi savi mīnusi. Es tik tā, lōti brutāli aizskāru sal'dzināšanu balstoties uz to kas man galbā palicis. Ja grib prezīzāk, ta naksies pētīt datašētus abiem. Abus apmuļļāt un tikai tad var salīdzināt. Vēl no manis: manuprāt vieklāk sākt MCU mācībās ar PIC, jo tas itkā ir vienkāršāks. Nū, ja salīdzina ASM griezumā.

PS: neredzu argumentus, kapēc AVR nevar izmantot realtime lietās. Vienkārši uz AVR tas darās nedaudz savādāk.  ::

----------


## RobinDAB

> Ar AVR RAM jāstrādā caur reģistriem. Man kā iesācējam bišku jāpacakarējas.


 look - LDS, STS.
Bet protams var arī caur reģistriem. Un reizēm arī vajag.



> AVR "mazāk" RAM


 hmm... Nu nu...  :: 



> [quote:9qwayan5]AVR ir "bezgalīgs" (cik ram ļauj) stack. PICam dzelzisks 7 līmeņi.


 [/quote:9qwayan5]
AVR nav absolūts un viennozīmīgs jēdziens.
Vari papētīt ATtiny15 - ja pareizi atceros tam arī nav stack. Līdz ar ko rcall nav iespējams kā suga.

Principā, ja kāds sāk apgalvot, ka kautkāds MCU ražotājs ir labāks par otru, tas neliecina par īpašu kompetenci. Jo tajas lietās konkurence ir apm tāpatās kā starp Intel un AMD priekš PC.
Katrs strādā ar to kas patīk, vai arī izmanto to kas ir ekonomiski pamatots.
AVR - imho bišķiņ skaistāki debageri (un lētāki)
Microchip - imho mazāk problēmas ar iegādi nepieciešamajos daudzumos (microchip direct).

Perifērijas (kas principā ir noteicošais MCU izvēlē pārsvarā gadījumu) - var gan no viena? gan no otra ražotāja atrast vajadzīgo. Rakstot C - diezgan maz problēmu migrācijā starp platformām. Atšķirībā no ASM.

Man piemēram patīk Motorola, bet ekonomiskā pamatojuma to lietot īpaši nav. Tajā pašā laikā ja runa iet par stabilitāti un extended temperature range, why not? 
Un Dallas crypto procesori? Un Cypress 51 arhitektūra, kas lādējas caur USB? Tik daudz visa kā skaista...
Katra lieta savai vajadzībai.

----------


## RobinDAB

> es varu sadereet da uz jebko, ka taas 133 komandas tiek izmantotas vismaz 3X neefektivaak kaa 40 RISC komandas


 Kaspič, nav Tev taisnība. Zvel man ar beigtu reņģi, bet nav.

Principā gan ir viens cits prikols, piemēram:
BRCC = BRSH
LDI Rd, 0x00 = CLR Rd
LDI Rd, 0xFF = SER Rd
SBR Rd, K = ORI Rd, K
utt.
+ visas apm 20 operācijasar SREG bitiem - principā aizstājas ar daudz elementārākām, bet pierakstā nesaprotamākām lietām.

nu un tādā garā. Principā, rezultāts tāds pats, kloki tie paši, da i HEX beigās tāds pats. Tikai ASM pārskatēmāks.

----------


## kaspich

RISC izstraadaataji bija izpeetiijushi, ka, piem., 8080 un citu liidziigu prochu programmeetaaji ASMaa [buusim godiigi - augstas performances realtime aplikaacijaam ASM ir pareizaakaa izveele] izmanto vnjiem 'patiikamaakaas' komandas, 'nepierastaakas' izveloties tikai galigas nepiecieshamiibas gadiijumaa.
kods 'galvaa' tika piemeerots eertaakajam komandaam, peec izpeetes izraadiijas - efektivitaate ir taalu no maksimuma.

taadeelj RISC tika izveidots sekojoshi [dazhas lietas]:
1. minimizeets komandu skaits, nav nekaadu dubleeshanos
2. katra komanda ir piemeerojama visaas situacijaas [ar ljoti retiem iznjeemumiem]
3. visi regjistri ir universaali [iznjemot uzstaadiijumu un paariiti specializeto, like W PICos]
4. katra komanda - noteiktu [vienu] ciklu

respektiivi, nav speciaalu math regjistru, u.c. briinumu. kaa math regjistrs var kalpot jebkursh.

piemeeram, add reg1,1 ir piemeerojams visiem regjistriem, ieskaitot progcounter, portus, netiesho adresaaciju, u.t.t.
man nevajag 10 dazhaadus komandu nosaukumus, atcereties nianses. 
manupraat, tieshi RISC [PIC] kods ir 117 reizes parskataamaks un saprotamaaks. un idejiski advanceetaaks.

par partraukumiem - jaa, reizeem kretinee. bet taa ir koncepta filosofija - paartraukumus skjirojam softiski. kretinee, kad vajag max aatru reakcijas laiku. tad naakas bisku saspringt;
stack.. nu, 8 iekljaushanas liecina par zemu programmeeshanas liimeni. nu, piedodiet.. 

cik cilveku, tik taisniibu, tik pieredzes. es izgaaju cauri CISC, nonaacu pie RISC un sapratu - jaa, taa ir lieta. 
ne velti visis lielie prochi isteniibaa iekspusee jau sen ir RISC idejiski, tikai savietojamiibai 'no aarpuses' ir CISC stila komandu sisteema.

----------


## marizo

Pieņemsim, ka ir praktisks uzdevums:
3 kanālu 8-bitu PWM RGB LED dimmeris.

Iespējams vadīt PWM caur infrasarkano RC5 vai DMX512, vai UART 9,6 vai 19,2 kbit/s.
Caur UART (pa to pašu DMX ieeju) iespēja uzstādīt DMX adresi (varbūt vēl kādus konfigurācijas parametrus) un vadīt PWM (no datora vai cita PIC), automātiska pārslēgšanās DMX<->UART.
Caur IR RC5 var dot komandu ieslēgt/izslēgt PWM vadību no RC5, mainīt PWM.
Papildus dot indikāciju ar kādām 2..3 LED par notiekošo.

Kontrollers PIC16F628A dēļ tā, ka iebūvēts UART.
Atsevišķas funkcijas izveikt +- izdodas, bet domāju, kā to visu dabūt kopā tā, lai viss normāli funkcionētu un programma būtu pārskatāma, ērti papildināma.

Kāds varētu būt šīs programmas optimāls algoritms? Ko uz pārtraukumu, kādas prioritātes utt?

----------


## JDat

Ui bļin kur saflietēju par AVR RAM. P cik kādu laiku neizmantoju AVR (da i PICus sen netaustīju). ar LDS un STS biju totāli aizmirsis. Tapēc arī tik dumi uzrakstīju par AVR "mazo" RAM. Ar to es gribēju pateik ka iekš AVR pa tiešo pieejami 32 reģistri a PICa m viss RAM. Pateicoties LDS un STS, tas nav taisnība. Atvainojos par dezinformaaciju un savu dumumu.

Perifērija. Nu jā, te katrai situācijai savu akmeni ņemam.

Par stakc. E nekorekti saliidzinaaju AtMega un PIC16F84, tāpēc arī man tik neprecīzs salīdznājums.

Par matemātiku uc komandām.
iekš PIC16F84 bija tika viena vai divas branch komandas (rakstu no galvas) branch if zero un branch in no zero (laikam). A iekš AVR (kas man patika) ir Branch if zero, brnach if not zero, branch if equal, branch if less, branch if negtive, branch if N flag set, branch if N fla is not set, branch if Z flag set, brnach if Z flag not set utt. Tā arī ir tā bagāža kas palielina AVR komandu skaitu. Kas tur labs? A vot pārlec kur vajag salīdznot divus manīgos un miers. Iekš PIC bija kaut kas kātņem no kaut kā un tad varēja pārlekt ja pāri paliek nulle vai tml (neatceros nianses, kad vajag precīzi, tad lasu datasheet).

Īsumā tādas pārdomas, pie kaltes un galvassāpēm  ::

----------


## kaspich

ljoti labs piemeers.

luuk, tie branch, cik ciklos izpildaas? domaju, 2/3/4
ok, PIC sanaaks par 1..2 rindinjaam garaak, toties - prasmigs programmeetaajs W ielaadees tieshi to regjistru, kas kalpos kaa ieejas dati peec brancha, atnjems un noglabaas rezultu tur, kur vajag. un ieekonomees 1..2, a varbuut arii 4 ciklus aatrdarbibaa.

PIC ljauj btfsc, btfss no JEBKURA bita: zero, borow, jebkura cita [statusa, paartraukuma, porta, comand countera, u.t.t.].

----------


## JDat

Marizo!
RC5 un DMX512 laikam ir bitbang. Attiecīgi ja nav strādāts (es neesmu) tad no sākuma uzraksti tikai šos moduķus atsevišķi. Piemēram lai RC5 baitus tavs MCU sūta uz PC. Lai var debugot un atrstādāt kodu. RC5 varēja gan ar taimeri, gan primitivi dekodēt. MUltitāskinā(manuprāt) derētu ar timeri. DMX... Ehhh emsu asījis bet neesmu mēīnājis. Tur kaspich var padalītie ar tikiem. Vai arī pameklē kādu DMX dekodera kodu (bija pat priekš PIC16F84 kods uzrakstīts). Kā tieši realizēt, tagad neapteikšu.

Globāli ņemot:
Katram notikumam (RC5 pin change, UART byte in/out, PWM END) savu Interruptu. Tā pat jāizrēķina ci bieži vajadzēs timer interrupt. Tālāk taisam "virtuālos softiskos timerus" kā mums vajag. Main loop satrādā ar visādām aprēķinu un domāšanas lietām. Interrupti ir īsi un uzstāda vajadzīgos "virtuālos flagus" vai ātri uztaisa dažus +1 dažiem mainīgajiem. Apmēram tā ar sāpošu galvu. Sākumā iesaku atstrādāt UART komunikāciju. osūtīt teiksim 10 baitu komandu uz MCU un saņemt 10 baitu paketē statusu no MCU. Tad UART izmantot kā pseidodebugeri pārējām lietām: sūtīt uz PC RC5 kodus, sūtīt uz PC DMX datus (daļu), no PC saņemt instrukcijas ko darīt ar PWM utt. Es vismaz tā savā amietiskajā darbībā darītu. Pakāpeniski līdz viss tiktu implemenēts un pārbaudīts.

----------


## JDat

Kaspich, nav tik traki.
Paskaties: http://www.avr-asm-tutorial.net/avr_.../COMMANDS.html

1-2 clk uz branch. Pie tam PICam clk bija osc/4, bet avr clk=osc (te EPIS varētu cepties un īdēt ka AVR ir 4x ātrāks par PIC  :: ) Cita lieta: iekš AVR CALL, RET un IRET izpilda divos/četros clk.

Pēc būtības AVR komandas tika veidotas tā lai var viegli impleminēt C kompiatoru.

Bet... Īsti vīri raksta ASM, netaisa BACKUP un mīž uz plikiem elektrības vadiem.  :: 

Pamēģini pataustīt AVR ASM, ja tev būs laiks. Es negribu nolikt ne vienu ne otru MCU arhitektūru. Izvēlos īsto akmeni pēc situācijas. Un te stipri palīdz tas, ka nedaudz zinu abas arhitektūras.

----------


## marizo

JDat
man šobrīd gribas vispārīgi saprast algoritmu.
RC5 saņemt/dekodēt varu, tikai- tā programma uz delayiem (šajā gadījumā neder!), tātad nāksies darīt savādāk.
UART man būs tikai IN, jo notiksies caur to pašu DMX līniju, kas būtībā ir RS485.
Te daži DMX projekti. Tādā veidā uztveršana darbojas, DMX ir tas pats UART ar 250kbit, 2 STOP bitiem. Tikai jānoķer DMX datu pakas sākums, kas izpaužas kā UART hardware errors. RC5 gan ir bitbang.
Tajos paraugos DMX adresi uzstāda ar slēdžiem, bet, tā kā es DMX _iegūstu_ ar PC programmām, tad arī konfigurāciju gribas pieviest līdzīgā veidā, nevis slēgājot slēdžus tajā dimmerī. 
Bija arī Mikročipa AN par DMX.

Līdz šim:
Pa UART saņemt 3..8 bitus PWM datus main ciklā un uz INT uzlikt PWM - ir OK.
Saņemt DMX datus un PWM - ne pārāk labi, PWM raustās.

Nav jēgas tagad te likt tos asm, kur kaut kas nesanāk. Visticamāk - idejiski nepareizi.  ::

----------


## JDat

Vikings ar izteca ideju ka DMX varētu saņemt dzelziski.

Delay loop der tikai kā pirmais projets LED midžināšanai vai debuošanai. Delay izmantoju (uz AVR), ta ka taisīju bitbang SPI līdzinieka out. Man pie MCU bik pieslegts 7-seg displejs. Attiecīgi katra izeja bij savs LED. Kods raustīja katru pinu reiz sekundē un redzēju vai viss notiek tā kā plānots. Gatavā kodā izmetu delay.

Žēl ka ar PWN neesmu strādājis. Patāsti idejiskā līmenī ko tev interruptos kods dara. Idejiski lai dabūtu ātrumu pagaidām izmet RC5 kā tādu, līdz brīdim kamēr uzrakstīsi bez delay loop. Cik zinu par DMX... Sagaidam start, sagaidam pirmo baitu un saglabājam. Tad iekš katra interrupt skaitam kanālu un saglabājam mainīgajā temp kanāla datus kas atnāca. Main loop čeko vai kanāls (vai adrese, ka tur bija...) ir mūsējā. Ja ir tad main loop izdara ko vajag. Šitajā vietā main loop jaizskien cauri ātrāk ne kā atnāk jauns DMX kanāls. Ir biški ko pacīnīties. Kā PWN strādā? vai PWN nevar organizēt tā: ka PWN visu laiko dod ārā vajadzīo platumu bez MCU koda palīdzības. No serijas: MCU sakonfiurē PWM un vairs nepiedalās PWM lietās. Tiklīdz PWM platums jāpamaina, ta MCU sagaida PWM beigas un parregulē PWM. Kaut kā tā... Ar UART no PC līdzīi kā ar DMX. iekš IRQ salabājam baitu tempā. Main loop tālāk saliek kur vajag visus baitus. Kad visi baiti atnākuši, tad main loop apstrādā paketi.

----------


## M_J

PICos man apgrūtinošas likās divas lietas: Kaspiča jau pieminētā pārtraukumu šķirošana un ņemšanās ar komandu skaitītāja vecākajiem bitiem, pārlecot starp atmiņas lappusēm. Atmeļos sākumā visvairāk pietrūka tas, ka nav tāda komanda kā PICiem RETLW un traucēja tas, ka 32 universālie reģistri tomēr ir vairāk vai mazāk specializēti. Par BTFSS/BTFSC iztrūkumu maza bēda, to vietā ir SBRS/SBRC/SBIS/SBIC. Nu labi, ar šīm komandām nevar pa tiešo piekļūt SRAMam  un dažiem Atmegas 128 I/O, statusa vai kontroles reģistriem, bet mazākiem atmeļiem es neesmu pamanījis, ka būtu kāds I/O statusa vai kontroles reģistrs, kur ar šīm komandām nevar piekļūt.

----------


## marizo

The basic DMX-512 signal is a 250kbps serial signal, eight bits data, one start bit, two stop bits, and a frame start break travelling on the RS-485 standard.
Izmantojot


```
btfss 	RCSTA,RX9D				; Does 9th Bit of data = 1, eg Break
btfsc   RCSTA,FERR         		; Has a framing error occurred ?
```

 var atrast DMX Break, kā arī noteikt, ka pa UART klīst dati ar citu ātrumu kā PIC nokonfigurēts. 

PWM jātaisa sotware.
Es apmēram pēc šī koda daru: (atrodams kaut kur šeit - ou, ir vēl nākuši klāt jauni projekti, būs jāpapēta)


```
;PWM
pwmramp		; running 'ramp' counter used by PWM function
rled		; red   data, transferred to rpwm when pwmramp == 0
gled		; green data, transferred to gpwm when pwmramp == 0
bled		; blue  data, transferred to bpwm when pwmramp == 0
rpwm		; red   LED PWM drive level [0=O%, 255=99%]
gpwm		; green LED PWM drive level [0=O%, 255=99%]
bpwm		; blue  LED PWM drive level [0=O%, 255=99%]
; ******************************************************************************************************
; PWM code
; from call to return = 20uS
; compares current RG & B led values with 8 bit (256 step) pwmramp and activates GPIO output accordingly
; note: LED will never be 100% on. 
;       With xpwm=255 led will be off for 1 pwm period
;       or minimum mark/space ratio is 0%, maximum is 99%
;
; LED data is only transferred to the LED PWM registers when the PWM Ramp is at zero.
; This adds 6uS to a PWM Drive cycle once in every 256 calls to the pwmDrive function.

; ------------------------------------------------------------------------------------------------------
;							;Time uSeconds
PWM
	incf	pwmramp,F		;3 (call is 2 + incf = 3)
	skpz					;4 
	goto	DO_PWM			;6

READ_PWM
	clrf	PORTA			;
	movfw	rled			;  
	movwf	rpwm			;  
	movfw	gled			;  
	movwf	gpwm			;  
	movfw	bled			;  
	movwf	bpwm			;  

DO_PWM
	movfw	pwmramp			;7 
	addwf	bpwm,W			;8 
	skpnc					;9
	bsf		Blue			;10   
	movfw	pwmramp			;11
	addwf	gpwm,W			;12
	skpnc					;13
	bsf		Green			;14
	movfw	pwmramp			;15
	addwf	rpwm,W			;16
	skpnc					;17
	bsf		Red				;18
	goto	PWM
	return					;20 (return is 2 instruction cycles)
```

 Te arī ir tas, ka jaunās PWM vērtības ielasa cikla beigās no "starpreģistra". Te jau man bija grābeklis - taisīju, ka PWM vērtības ieraksta _pa taisno_, bet sāka raustīties nesmuki.

Šo kodu tad izsaucu uz INT, bet main nodarbojas ar, piemēram, UART saņemšanu.

Neiet jau runa par koda salikšanu no paraugu gabaliem. Gribu vairāk izprast multitasking, kā izvēlēties prioritātes utt nianses.
Sāpīgs pieredzes trūkums, kam cik resursu jāatvēl, TMR, INT, prioritātes.. kā to visu dabūt kopā.   ::

----------


## kaspich

> Kaspich, nav tik traki.
> Paskaties: http://www.avr-asm-tutorial.net/avr_.../COMMANDS.html
> 
> 1-2 clk uz branch. Pie tam PICam clk bija osc/4, bet avr clk=osc (te EPIS varētu cepties un īdēt ka AVR ir 4x ātrāks par PIC ) Cita lieta: iekš AVR CALL, RET un IRET izpilda divos/četros clk.
> 
> Pēc būtības AVR komandas tika veidotas tā lai var viegli impleminēt C kompiatoru.
> 
> Bet... Īsti vīri raksta ASM, netaisa BACKUP un mīž uz plikiem elektrības vadiem. 
> 
> Pamēģini pataustīt AVR ASM, ja tev būs laiks. Es negribu nolikt ne vienu ne otru MCU arhitektūru. Izvēlos īsto akmeni pēc situācijas. Un te stipri palīdz tas, ka nedaudz zinu abas arhitektūras.


 
nu, pag, par to aatrumu. kameer AVR stradaa uz 16mhz, PIC straadaa uz 64. sanaak 1:1. ja par aatrumu  :: 
par C kompilatoru - jaa, to var maniit. bet, taa ka es uzskatu, ka galvenaa pievienotaa veertiibaa ir realtime kritiskaas lietas + ASM, manu sirdi tas nesilda  :: 
C vai Basic programmeet kaut ko kaut kaa menu liimenii katrs ir gatavs.. :P

----------


## kaspich

> PICos man apgrūtinošas likās divas lietas: Kaspiča jau pieminētā pārtraukumu šķirošana un ņemšanās ar komandu skaitītāja vecākajiem bitiem, pārlecot starp atmiņas lappusēm. Atmeļos sākumā visvairāk pietrūka tas, ka nav tāda komanda kā PICiem RETLW un traucēja tas, ka 32 universālie reģistri tomēr ir vairāk vai mazāk specializēti. Par BTFSS/BTFSC iztrūkumu maza bēda, to vietā ir SBRS/SBRC/SBIS/SBIC. Nu labi, ar šīm komandām nevar pa tiešo piekļūt SRAMam  un dažiem Atmegas 128 I/O, statusa vai kontroles reģistriem, bet mazākiem atmeļiem es neesmu pamanījis, ka būtu kāds I/O statusa vai kontroles reģistrs, kur ar šīm komandām nevar piekļūt.


 
iisteniibaa abas [no arhitektuuras/elektonikas viedoklja] ir/bija vienkaarshi risinaamas lietas. sho es nesaprotu - kaapeec spiitiigi tos IRQ 16 series neskjirot..


18series ir 2 liimenju vektoru sisteema [ar 2 vektoriem: 0018h un 0008h], ar iespeeju katram INT source noraadiit nostraadaashanas nosaciijumus, on/off/prioritaati.
procounters automaatiski tiek ielikts stekaa/izvilkts, bet.. W, status, u.c. lietas - manuaali. nu, pie shii jaapierod..

----------


## kaspich

peec manas saprashanas - shajaa posmaa [maaciishanaas] gatavu modulju izmantoshana jau ir FAIL. peec buutiibas.
programmeeshana ir DOMAASHANA. ko Tu ieguusti, ieliekot taadu sveshu/kaut kaadu koda fragmentu? neko. tikai gljukus. sajeega Tev vairaak klaat nerodas. ja nevelc taadaa liimenii, lai pats to izveidotu, stop. solis atpakalj. raksti SAVU kodu. tas ir taapat kaa edzus te ampus 'montee'. kaut ko tikai ljepii kopaa, nekas iisti nestraada, kaapeec, nesaprot, bet - nepabeidzis/nesapratis vienu, metaas pie naakoshaa..
Tu ieliki koda fragmentu. SVESHU. kaada no ta jeega? pieraadiijuma, ka John ko Konektikutas maak 20 rindinjas uzrakstiit??  es ticu.

----------


## marizo

Man jau sen skaidrs, ka izcils programmētājs nekad nebūšu, ar to nelielos un neslēpju.   ::  
Saprotu to, kas tajās 20 rindiņās notiek. Pēc 5 gadiem varbūt pie tāda paša nonāktu + pieredze. Vai tas ir slikti, ja izmantoju koda gabalu, kas ir, manuprāt, ir optimāls?!
Protams, nav tā, ka visiem ir viens programmēšanas stils, domāšana.
Par programmēšanu tagad tādu vienkāršu piemēru nevaru iedomāties, bet matemātiski cenas ar PVN aprēķināšana, ja uz kalkulatora nav + x % darbības. 
Viens rēķina: cena/100*22+cena (vai vēl neracionālāk: izrēķina cena/100*22, nodzēš, tad baksta cena+PVN no savas atmiņas)
otrs: cena*1,22. Tā nu tas ir.
Tāpēc jau rakstīju



> Neiet jau runa par koda salikšanu no paraugu gabaliem. Gribu vairāk izprast multitasking, kā izvēlēties prioritātes utt nianses.
> Sāpīgs pieredzes trūkums, kam cik resursu jāatvēl, TMR, INT, prioritātes.. kā to visu dabūt kopā.


 Kur ir tie paraugi absolūti pareizie kodi, kurus pētīt, no kuriem mācīties? Šķiet tādu nebūs, jo cik dažādu situāciju, tik dažādu risinājumu.
OK, savu kodu. Ar ko sākt?
Uzrakstu tik tālu, ka man ir Main ar PWM tajā. -tas man neko nedod
Uzrakstu Main ar RC5 uztveršanu tajā. -tas man neko nedod
Uzrakstu Main ar DMX uztveršanu tajā. -tas man neko nedod
utt.
-tas man neko nedod, jo tas viss kopā nedarbosies. (vai vajadzēs nenormāli ātru kontrolleru)

Ko es esmu novērojis: nav man saprašanas, kas būtu tas labais stils programmēšanā.
Aizmirst par programmēšanu?   ::

----------


## M_J

Nu AVR jau arī pie pārtraukumiem stekā automātiski saglabā tikai programmas skaitītāju. Būtu ērti, ja tiktu saglabāts arī statusa baits. Tāpat tas praktiski vienmēr ir jādara. Ja jāsalīdzina PIC un AVR - uz atmel savulaik pārgāju spiestā kārtā. Kaut kad, 90-to beigās ierodoties Ormixā pēc PIC16F84, Igors mani nepatīkami pārsteidza - "nav, tuvākajā laikā nebūs, šķiet ar Microchip ir cauri". Noticēju. Vietā piedāvāja AVR. Tā, kā tobrīd steidzami vajadzēja uztaisīt vienu lietu, taisīju uz AVR. Tā arī pie AVR paliku. ASMā programmējot ir neērti mētāties turpu/šurpu starp arhitektūrām un komandu sistēmām. Man vienmēr ir bijusi ļoti būtiska programmas spēja strādāt reālā laikā. Nu nejūtu, ka šajā ziņā AVR būtu kādi būtiski ierobežojumi, slīdzinot ar PICiem. Visu, ko varēju realizēt uz PICiem, varēju arī uz AVR. Protams, mana darbošanās ar PICiem nesniedzas tālāk par 16F84, 16C63, 16C74.

----------


## kaspich

> Nu AVR jau arī pie pārtraukumiem stekā automātiski saglabā tikai programmas skaitītāju. Būtu ērti, ja tiktu saglabāts arī statusa baits. Tāpat tas praktiski vienmēr ir jādara. Ja jāsalīdzina PIC un AVR - uz atmel savulaik pārgāju spiestā kārtā. Kaut kad, 90-to beigās ierodoties Ormixā pēc PIC16F84, Igors mani nepatīkami pārsteidza - "nav, tuvākajā laikā nebūs, šķiet ar Microchip ir cauri". Noticēju. Vietā piedāvāja AVR. Tā, kā tobrīd steidzami vajadzēja uztaisīt vienu lietu, taisīju uz AVR. Tā arī pie AVR paliku. ASMā programmējot ir neērti mētāties turpu/šurpu starp arhitektūrām un komandu sistēmām. Man vienmēr ir bijusi ļoti būtiska programmas spēja strādāt reālā laikā. Nu nejūtu, ka šajā ziņā AVR būtu kādi būtiski ierobežojumi, slīdzinot ar PICiem. Visu, ko varēju realizēt uz PICiem, varēju arī uz AVR. Protams, mana darbošanās ar PICiem nesniedzas tālāk par 16F84, 16C63, 16C74.


 jaa, delj taa perioda Microchip pazaudeeja MILZIIGU tirgus dalju.
F84 izraadiijas tik populaars, ka tonnaam gaaja visur kur, tikai ne uz LV, sakas vispaarejs bardaks, online iegaades nebija, normaala distributoru tiikla arii.. bija paaris gadi, kad viss bija dikti, dikti slikti.
toties tagad - nu, es kak bi vispaar stavu malinjaa, bet - kaads klaasts ar mcu, periferiju, zemvoltiigie opampi, komparatori, kas tik nav.. 

marizo - nu, hvz, ko Tev dariit. es ieteiktu DOMAAT. vot, domaa. sajuudz kopaa vienu tasku ar otru. paleenaam, step by step.
kaapeec suudiigi gatavi modulji? nu, ir tas modulis. it kaa saproti.. tur pat komentus pielicis neesi. peec nedeljas [zub daju] - nesapratiisi..
ja saproti - kaut paaraksti, ar saviem komentiem, savaa stilaa.

----------


## JDat

Par multitaskingu kā tadu: http://www.freertos.org/implementation/
Idejas sēlot šitajā. Protams C vietā man ir ASM. 

Par PIC vs AVR. Tiko padomāju par interruptiem. PIC16 interesanta lieja, jo ir tikai viens interrupt vektors. Ienākot interruptā var izvēlēties kuru no interrupt source apstrādāt pirmo. AVR tā nevar, jo katram source ir savs interrupts. Lurš pirmais notie, tas pirmais apstrādā. Tas tā milimetri uz šosejas Rīga-Daugavpils, bet kādreiz var noderēt.


Marizo!. Neribu tevi apvainot, bet uztais arvancētu LED mižnātāju (8 LEDi), kur tiek izmantots viens timer, ne kādi delay loop netiek lietoti. Katram LEDam sava frekvence: 1.-1Hz;2.-10Hz;3.-100Hz;4.-1000Hz;5.-32Hz; 6.-500Hz; 7.-0.5Hz; 8.-2Hz.
MCU OSC=4 MHz

Ja uztaisīsi pec nosacījumiem(viens tms,tms irq,no delay loop) tad tev sanāks multitasking.

----------


## kaspich

jdat - nuu, a kaapeec nevar avr mainiit int seciibu?
1. darbojamies ar enable/disable karogiem. events jau tapaat tiks piefikseets
2. iekriitot kaadaa nesvariigaakaa tiek uzstaadiits karogs, lecam aaraa, sho int apstraadaajam main/liimeni zemaak [ja main tiek daliits treados], svariigaaku int pashaa int subprogramma


p.s. tas uzdevums multitask nesanaak. njemam timer ar augstako atrumu un peec kartes/countera vnk saziimeejam izejas.

multitask buuutu, ja sho virteni papildinaatu ar aareeju notikumu. piem., nospiezhot pogu X, papildus 3X ar intervaalu 3.47 Hz jaanomirgo [nekaveejoshi] citai LED. 
laika aizture starp pogas nospieshanu un taas spec LED iedegshanos ne vairaak kaa 10uS. kljuda 3.47Hz periodam ne vairaak kaa 0.01%. peec pieprasiijuma jaaspeej gjenereet 2..5Hz [ar 0.01hz soli], NEMAINOT paarejo LED mirgoshanas aatrumu.
luuk, multitask :P

----------


## JDat

var jau. venkārši ka abus noliek blakus, tad redz kas kuram ērtāks.

----------


## next

> Nu AVR jau arī pie pārtraukumiem stekā automātiski saglabā tikai programmas skaitītāju. Būtu ērti, ja tiktu saglabāts arī statusa baits. Tāpat tas praktiski vienmēr ir jādara.


 Iisteni pareizam paartraukumam nav jaadara.
Jo tur tiek fikseeti notikumi un uzstaadiiti karogi, nekas cits.

----------


## kaspich

> Nu AVR jau arī pie pārtraukumiem stekā automātiski saglabā tikai programmas skaitītāju. Būtu ērti, ja tiktu saglabāts arī statusa baits. Tāpat tas praktiski vienmēr ir jādara.
> 
> 
>  Iisteni pareizam paartraukumam nav jaadara.
> Jo tur tiek fikseeti notikumi un uzstaadiiti karogi, nekas cits.


 
nu jau, nu jau! un ko dariit aar eventiem, reakcijas laiks uz kuriem ir saliidzinaams ar mcu IPS??  ::  skaidrs, ka Tu iistu realtime variantu veidojis neesi :P

----------


## marizo

> Marizo!. Neribu tevi apvainot, bet uztais arvancētu LED mižnātāju (8 LEDi), kur tiek izmantots viens timer, ne kādi delay loop netiek lietoti. Katram LEDam sava frekvence: 1.-1Hz;2.-10Hz;3.-100Hz;4.-1000Hz;5.-32Hz; 6.-500Hz; 7.-0.5Hz; 8.-2Hz.
> MCU OSC=4 MHz
> 
> Ja uztaisīsi pec nosacījumiem(viens tms,tms irq,no delay loop) tad tev sanāks multitasking.


 Nekādā ziņā tas nav apvainojums.
Ideja, kas nāk prātā:
INT no TMR ar pārtraukumu ik pa 1000Hz (reāli laikam vajag *2= 2kHz, lai dabūtu 50% PWM ar tiem Hz)
100Hz - uz katru 10-to pārtraukumu
1Hz - uz katru 1000-šo
0,5Hz - uz katru 2000-šo
Figviņzin, ko darīt ar 32Hz. Tas neiederas, jātaisa pārtraukums uz 4 ( ::  kHz.
bet nu tad ir 16-bit matemātika.

1)Taimera pārtraukums uzstāda kaut kādu flagbitu, kuru apstrādā Main cikls ar skaitītājiem katrai Hz.
vai
2)Taimera pārtraukums palielina skaitītāju +1

Tālāk doma, ka var taisīt katru nākamo F, atkarībā no iepriekšējās:
1000Hz=2*500Hz; 500=5*100Hz; 100=10*10Hz. Nav 16bit matemātikas, bet atkal 32Hz neiederas.

Laikam TMR pārtraukums jāliek uz 8kHz, ik pēc 4riem pārtraukumiem mainam 1000Hz stāvokli. Ik pēc 125ciem pārtraukumiem mainam 32Hz stāvokli.
Starp pārtraukumiem ir 125us = tikpat instrukcijas Main ciklam - ! Nē, Main paliks vēl mazāk. 
8ņiem mainīgiem +/-1, salīdzināt ar vajadzīgo, nomainīt izejas stāvokli.. Ja vispār var, tad tas arī ir viss, ko PIC varēs paspēt manā izpildījumā.  ::

----------


## JDat

Jap, apmēram tā. Tikai kas būs iekš interrupt koda un kas buus ieksh main. Atceramies, ka IRQ kodu jādabū maksimāli īsu. Visas garās peteres uz main loop.
Sanāks kaudze ar vituālajiem taimeriem vai postscaler (saucam kā gribam). Tad main loopā barētu but kaudze ar mikrotaskiem, kur katrs task aktivizējas pie noteikta skaita timer IRQ. Idejiski. Rakstīt psedokodu šodien negribās.  ::

----------


## kaspich

kruta. un kur te ir multitasks?  ::   ::   ::  
aftor, Tu baigi gudri - panjeemi vienkaarshako..

* multitask pirmkaart ir VAIRAAKU  UN NEATKARIIGU PROCESU MANAGEMENTS.* 
shie NAV neatkariigi.

sheit ELEMENTAARI - dalam tikai timer!!!!!!!!!!!!!!!!!!!

----------


## marizo

IRQ:
reģistru saglabāšana (W, STATUS, PCLATCH, FSR - pēc vajadzības)
;btfsc   INTCON,T0IF		; TMR0 overflow? (must be cleared in software)
bsf flag,bit
bcf INTCON,T0IF
reģistru atjaunošana
retfie	; Return from interrupt; re-enable interrupts GIE=1

Pārējais iekš Main.
Teorētiski tad skaidrs.

Bet kā tas palīdzētu manam uzdevumam?

----------


## marizo

Kaspich, nu 16bitu matemātikai _man_ laika nepietiek.   ::

----------


## kaspich

nekaa.

popitka nr2

* multitask buuutu, ja sho virteni papildinaatu ar aareeju notikumu. piem., nospiezhot pogu X, papildus 3X ar intervaalu 3.47 Hz jaanomirgo [nekaveejoshi] citai LED.
laika aizture starp pogas nospieshanu un taas spec LED iedegshanos ne vairaak kaa 10uS. kljuda 3.47Hz periodam ne vairaak kaa 0.01%. peec pieprasiijuma jaaspeej gjenereet 2..5Hz [ar 0.01hz soli], NEMAINOT paarejo LED mirgoshanas aatrumu.*

----------


## Delfins

Nu pēc mana, īsts multitasks ir iespējams tikai HW līmenī, kad HW strādā paralēli - x-kodoli pilda savu "kodu". tie paši taimeri itkā griežās (skaita) jau neatkarīgi, un teorētiski uz taimera interruptu varētu +/- paralēli sīkus darbus ar nelielu nobīdi jau pildīt.

----------


## kaspich

> Nu pēc mana, īsts multitasks ir iespējams tikai HW līmenī, kad HW strādā paralēli - x-kodoli pilda savu "kodu". tie paši taimeri itkā griežās (skaita) jau neatkarīgi, un teorētiski uz taimera interruptu varētu +/- paralēli sīkus darbus ar nelielu nobīdi jau pildīt.


 ne gluzhi. ir konkreetas tehniskaas prasibas, ar ko saakas viss pasaakums.
piemeers.

bija te tas IR uztveereejs + 50hz AC faazes regulators.

IR aatrums, piem., 2kbodi [0.25ms impulss, 0.25ms pauze]
faazes regulatoram F=50Hz [20ms], pussine 10ms.

IR uztveereeja taskam jaaspeej reagjeet ar laika nobiidi zem 0.05ms no ideaalaa [50us], tad dziters buus nenoziimiigs [nejuks dati nost]
faazes regulatoram - pienjemsim, ka mums buus 256 spilgtuma gradaacijas [buus ok, ieiet 1 baitaa], deelj sine lielas nevienmeeriibas jaanjem vismaz 10X vairaak 'laika' poziiciju [jo sakumaa sine pieaug strauji, peec tam - spilgtums pieaugs daudz leenaak], taatad ap 2000 poziicijaam 10ms laikaa, seko, ka reakcijas
laikam uz sho event jaabuut 5uS. dalju no 2000 poziicijaam zaudeesim delj preheat, bet, ar atlikushajaam japietiek [ar rezervi].

nu luuk, ja ar shaadu izskjirtspeeju var izpildiit shos uzdevumus, tas buus multitask  ::

----------


## Slowmo

Tur jau tā lieta, ka multitaskings nav tikai aparātisks līmenis. Ņemam par paraugu operētājsistāmas (Windows, Linux u.c.). Tur tak desmitiem vai pat simtiem procesu darbojas paraleli.

----------


## RobinDAB

> Tur jau tā lieta, ka multitaskings nav tikai aparātisks līmenis. Ņemam par paraugu operētājsistāmas (Windows, Linux u.c.). Tur tak desmitiem vai pat simtiem procesu darbojas paraleli.


 nu nu...!
dīzāk jau nevis paralēli, bet virknē...
 ::

----------


## Slowmo

Paraleli no lietotāja viedokļa. Protams, ka starp visiem procesiem pieejamais procesora laiks tiek sadalīts. Tā jau arī ir "multitaskinga" ideja.

----------


## kaspich

26.lpp izraadiijaas, ka no kadiem 6+ [par paareejiem nav skaidrs] 2 ir skairds, kas ir multitasking.. vienam aktiivam 'programmeetaajam' vispaar, piem., bija paarlieciiba, ka timer paartraukums un paartraukumu skaitiishana main ir multitasking  :: 
bet, labaak veelak, neka nekad..  ::

----------


## Delfins

varbūt tā nebija pārliecība, bet pieņēmums/variants konkrētam uzdevumam.

----------


## kaspich

> varbūt tā nebija pārliecība, bet pieņēmums/variants konkrētam uzdevumam.


 pag, pag. aa, pienjeemums? nu, es jau par to pashu - sajeegas nav, un tad saak 'pienjemt'..  ::  bet, tas jau nemaina lietas butiibu.  :: 
konkrets uzdevums bija - multitasking. kur tas ir [kaut attaali] taja uzdevumaa?

----------


## Delfins

Kaspich, atkal ķeries pie vecā? ::  Var padomāt, ka visi piedzimst uzreiz ar rtos uz avr/pic zināšanām. Man ir aptuvena nojausma, bet ja man vajadzēs rtos vai simple multitask, pirmā lieta ko darīšu - iešu uz google. neizgudrošu divriteņi vēlreiz. Protams, nāksies izurbties kas un kāpēc, un ticu ka citi jau to lietu ir realizējuši 1000x labāk. Atliek tikai rakt lielas informācijas kaudzē.

----------


## kaspich

Tu pats saprati, ko uzrakstiiji, un kaapeec?
es runaaju par situaaciju, kad maaciitaajs [pasniedzeejs] pats pat aptuveni nefonjii teemu. tb, pirms staadiit uzdevumu citam/to maaciit - marsh [pasham] elementaras lietas apguut.

----------


## Delfins

kaspich, uzdevumu tu jau devi, es tik garām gāju un "izmetu" domu. Laikam vainīgs, ka nepieliku  "Varbūt var ..." un beigās jautājuma zīmi. tas tā, lai visi saprot, ka nemācu nevienu.

PS: es sapratu ko uzrakstīju. un mācītājs es toč nebiju/neesmu/nebūšu  ::

----------


## kaspich

da nee, ne jau par Tevi bija staasts  ::   ::   :: 
mieru, tkai mieru!

----------


## JDat

> 26.lpp izraadiijaas, ka no kadiem 6+ [par paareejiem nav skaidrs] 2 ir skairds, kas ir multitasking.. vienam aktiivam 'programmeetaajam' vispaar, piem., bija paarlieciiba, ka timer paartraukums un paartraukumu skaitiishana main ir multitasking 
> bet, labaak veelak, neka nekad..


 Ko? Viss ir relatīvi. Sākam ar vienkāršāku lietu, pēc tam apaudzējam ar pogas pribambasu. Var jau tupi dalīt no IRQ. Pricipā, tam ko devu arī tā var darīt. Svarīgi lai MCU mail loopā būtu brīzī kas delatj nefi. Ko tajā laikā daram? A ne ko. Vai nu vēlreiz cilopjam caur loop vai vispār ūlam ziemas miegā. Gaumes jautājums. Ja poga. Ta uz pas nospiešanu uzliekam karogu, atslēdzam pogas IRQ un sagatavojām devīto virtuālo timeri. Noskaitam debounce. Pārbaudam pogu vēlreiz pēc debounce laika. Ja joprojām nospiesta, tad iededinam LEDu. Vajag IRQ uz atlaišanu? Ta bloķejasm IRQ tikai nosiešanai, Atlaišanai nebloķejam. Utt utjp. Tā pat audzjam arī ar citiem pribambasiem. :P

----------


## kaspich

jaa, bet tam visam ko nosauci, nav NEKAADS sakars ar multitasking.  ::

----------


## RobinDAB

> jaa, bet tam visam ko nosauci, nav NEKAADS sakars ar multitasking.


 Kaut kur fonā klusi grabinās taimeris, otrā stūrīti UART nemanāmi iekašā buferos kārtējo baitu, ACP tikmēr gandrīz nemanāmi iterē.
Bet programmas skaitītājs tikmēr mierīgi lēkā pa 3 adresēm izpildot infinite loop.
Tāds gaumīgs "multitasking"... Why not? 
Viss atkarīgs no definīcijām un tā, kā gudri nosauc vienkāršas lietas - lai pēc tam būtu par ko parunāt...
 ::

----------


## kaspich

> jaa, bet tam visam ko nosauci, nav NEKAADS sakars ar multitasking.
> 			
> 		
> 
>  Kaut kur fonā klusi grabinās taimeris, otrā stūrīti UART nemanāmi iekašā buferos kārtējo baitu, ACP tikmēr gandrīz nemanāmi iterē.
> Bet programmas skaitītājs tikmēr mierīgi lēkā pa 3 adresēm izpildot infinite loop.
> Tāds gaumīgs "multitasking"... Why not? 
> Viss atkarīgs no definīcijām un tā, kā gudri nosauc vienkāršas lietas - lai pēc tam būtu par ko parunāt...


 shis jaa - ir. bet tur bija vnk 8 LEDi, kuru zibinaashanai izmanto[jam] IRQ. sore, tas ir tipisks 1 [viens] tasks.

----------


## JDat

Every body know: Shit happens
But...
Einštein: Shit is relative.

Terminoloģija ir smalka lieta.  ::

----------


## marizo

_bai ze vei_: everybody knows

Nu, uzdeva uzdevumu. Figzin, kā to pareizi atrisināt.   ::  

Bet šis



> multitask buuutu, ja sho virteni papildinaatu ar aareeju notikumu. piem., nospiezhot pogu X, papildus 3X ar intervaalu 3.47 Hz jaanomirgo [nekaveejoshi] citai LED. 
> laika aizture starp pogas nospieshanu un taas spec LED iedegshanos ne vairaak kaa 10uS. kljuda 3.47Hz periodam ne vairaak kaa 0.01%. peec pieprasiijuma jaaspeej gjenereet 2..5Hz [ar 0.01hz soli], NEMAINOT paarejo LED mirgoshanas aatrumu.
> luuk, multitask :P


 vispār kkas imaginārs vai arī ir reāli uzprogrammējams uz minētā(tajiem) kontrolleriem ar konkrēto minēto taktsfrekvenci?

----------


## kaspich

programmeejams. kaapeec ne?

----------


## M_J

> vispār kkas imaginārs vai arī ir reāli uzprogrammējams uz minētā(tajiem) kontrolleriem ar konkrēto minēto taktsfrekvenci?


 Sis uzdevums pat nav īpaši sarežģīts.

----------


## marizo

Interesanti.. Kāda tad aptuveni ideja, kādā virzienā domāt?

----------


## M_J

Es darītu tā - mums ir astoņas izejas, kurās katrā jāģenerē kāda frekvence + devītā izeja, kur jāģenerē impulsi, kas atkarīgi no pogas. Katrā situācijā , kad kādā no izejām jāmainās loģiskajam līmenim (izņemot gadījumu ar nekavējošu reakciju uz pogas nospiešanu) ģenerēsim pārtraukumu no taimera. Lai šos pārtraukumus varētu uzstādīt, vispims programmā "main" izrēķināsim laika momentus, kad katrā no kanāliem kaut kam jānotiek. Ņemsim teiksim tuvākos 8. Sarindosim šos laika momentus pieaugošā secībā. (nedrīkstam kļūdīties un ņemt no katra kanāla pa vienam laika momentam un sarindot pieaugošaā secībā, kāds kanāls ar augstāku frekvenci šajā rindā būs pārstāvēts vairākas reizes, kāds ar zemāku - nevienu reizi) Katram laika momentam piesaistīsim divus baitus (8+1 vienā baitā nesaiet), kurā ir informācija kurā kanālā šajā laika momentā notiks izmaiņa uz pretējo. Mums sanāk rinda, kurā katrs elements satur informāciju par laika momentu un šajā laika momentā veicamo darbību. Ja divi rindas elementi laikā sakrīt, vai atrodas tik tuvu, ka nav iespējams ģenerēt atsevišķus pārtraukumus, tos apvienojam. Uz tuvāko laika momentu iestādam taimera pārtraukumu. Uzstādam aktuālā rindas elementa rādītāju, lai tas norāda uz šo rindas elementu. Cik garu rindu veidot? Ar 8 elementiem domāju pietiek. Notiek pārtraukums no taimera - ņemam baitu, kur norādīts, kurās izejās jāmaina stavoklis uz pretējo un izdaram to, atzīmējam attiecīgo rindas elementu kā izpildītu, uzstādam rindas elementu rādītāju uz nākošo rindas elementu, ņemam no nākošā rindas elementa laika momentu, uzstādam uz šo laika momentu nākošo taimera pārtraukumu un atgriežamies no pārtraukuma. Programma "main" savukārt čeko kuri rindas elementi atzīmēti kā izpildīti un to vietā liek nākošos. Tā mums tas process ies pa riņķi - programma "main" liks rindā jaunus elementus, taimera pārtraukumi vilks ārā un izpildīs. Uz pogas nospiešanu iestādam pārtraukumu. Šis pārtraukums nekavējoši veic izmaiņas attiecīgajā izejā un uzstāda karogu, ka programmai "main" šī situācija jāapstrādā tālāk. Nospiežot pogu nāk klāt jauni, iepriekš neparedzēti rindas elementi un programma "main", ja tas nepieciešams, pārbīda jau izrēķinātos rindas elementus, lai varētu iespraust iepriekš neparedzētos. Un tādā garā ... Tas tāds ļoti vispārīgs un nepilnīgs apraksts algoritmam, kādu es izmantoju risinot šāda veida uzdevumus.

----------


## kaspich

nu, taa nu vis nesanaaks.
taa papildus pogas nospieshana [kaa redzi] noziimee:
1. atseviskjaa led_period regjistra jaaglabaa konstante, kuru mainot var mainiit periodu 2..5hz ar noteikto soli 
2. shii LED ir pilniigi asinhroni ar tam 8, un jaanodroshina 0.01% jeb 1/10000 preioda precizitaates
3. liidz shiis LED int izpildiishanai ir 10 [tikai] komandas

iisteniibaa uzdevums ir reizes.. hvz.. cik.. 100.. sarezgjitaaks, kaa biji iedomaajies :P

viss shis nozimee:
pat,ja mees taisam laika rezgji ar tmro, deelj asinhronaas LED naakas piespiedu akartaa to modificet [lai ieguutu delay prieksh 9. LED], naakas ieviest papildus skaitiitaaju un/vai paarslegt tmro uz mazaaku periodu, lai saskaitiitu nepiecieshamo atliku 9. LED [jo tmro mums ir 1byte garsh]. katru reizi sho visu veicot, aakas iegaumeet bijusho tmro staavokli, atjaunot to 1..8 LED laikam.

ja kapaa tmro ar max aatrumu, tad pie katras paarpildiishanas taisa incf tmro1,1 [taimera vecakais baits].
ar jaunaako vada 9. LED, atlikumu iepauzee softwariski. ar cecako rekjina/vada 1..8LED.

----------


## M_J

> iisteniibaa uzdevums ir reizes.. hvz.. cik.. 100.. sarezgjitaaks, kaa biji iedomaajies


 Nepārspīlē! Nav jau nav tas izdevums tik sarežģīts. Teicu jau, ka algoritma apraksts ir visai aptuvens, bez niansēm, kā risināt kaut vai tos 3 piesauktos punktus. Negribu strīdēties par PICiem, ļoti sen neko neesmu ar tie darījis, bet uz AVR tie ir risināmi elementāri. Kaut vai uz visvienkāršākā AT90S1200, nerunājot par Atmegām. Godīgi sakot brīnos, ka Tu šīs 3 lietas izcēli kā kaut ko īpašu.

----------


## kaspich

izceelu taapeec, ka vaardiski te daudz briinumu dzirdets - katrs otrais kosmosa kugji palaidis. reaali dziivee - izraadaas, ka tranzistoru iedarbinaat nemaak.. :P
izcelu, jo timer rezoluucija nepietiek, lai kaa vinju veidotu. savukaart, jebkura softiska modifikaacija/timer paarakstiishana ir chakars - ir jaatnjem lieki/modificeeshanas pareekjinaa/int pareereetais laiks. 
iisteniibaa par suudiigu precizitaati uzliku.. vajadzeeja tai 9. LED kaadas 20us ielomiit  ::  citaadi tur var bakstiities neracionaali. 

par taam 10us arii - taatad, 9. LED mums seezh uz INT. bet, ja ta INT laikaa ir jaaiesledz/japaarraksta 1..8LED, mums nav laika krist aaraa no int, naakt atpakalj. tas noziimee, ka 9.LED laikaa mums [ar nepiecieshamo time error] jaacheko timer int prieksh taam 8 LED, softiski vinjsh jaapstraadaa, jaaturpina 9. LED apstraade..

jaunais cilvek, man ir ljoti speeciigas aizdomas, ka teksts.. ' ..ļoti sen neko neesmu ar tie darījis..' noraada uz kaarteejo 'da es da man'.  :: 

p.s. reku uzdevumaa esmu ielicis 'nemainot aatrumu', kas varetu noziimeet -kljuda <1 cikls. kaa Tu TO realizeesi?  :: 
konkreeti sho 1 punktu, ludzu!  :: m?

----------


## M_J

> izcelu, jo timer rezoluucija nepietiek, lai kaa vinju veidotu. savukaart, jebkura softiska modifikaacija/timer paarakstiishana ir chakars - ir jaatnjem lieki/modificeeshanas pareekjinaa/int pareereetais laiks.


 Nestrīdēšos par 16F84, iespējams šādu uzdevumu racionālāk risināt citām metodēm, AT90S1200, kas ir vienkāršākais no AVR taimera rezolūcija noteikti nav šķērslis. Bet taimera modificēšana nav problēma. Ir taču precīzi zināms, cik tas laika aizņem, rakstot programmu var paskaitīt līdz. Tāpat ir zināms, kāds ir reakcijas laiks uz pārtraukumu. Tas viss, protams, jāņem vērā, bet nekas parcilvēcīgi sarežģīts tas nav. Jāatzīst, tajā brīdī, kad aprakstīju algoritmu, prātā stāvēja AVR 16 bitu taimeri. 8 bitu taimeris situāciju nedaudz sarežģī, bet ne principiāli. Vienu vai vairākas vecākās kārtas softiski pielikt arī nav problēmu. Nu un 20 mikrosekunžu precizitāte - tas atbilst frekvencei 50kHz. AVR, kas iet uz 4 MHz tajā laikā izpildīs 80 vienkāršākās komandas, PICam šis skaitlis jādala ar 4. AVR reakcijas laiks uz pārtraukumu ir 4 pulksteņa tikšķi, PICiem neatceros. Tur tiešām būtu stipri jāiespringst, lai šādās precizitātes robežās neiekļautos. Ja vēl ņem vērā, ka viss ir sen iepriekš zināms, izņemot pogas nospiešanas momentu. Jā, to var nogulēt, ja ilgi apstrādā taimera pārtraukumu un šajā laikā visi pārējie pārtraukumi ir aizliegti. Bet šo situāciju var risināt savādāk. Gan jau zināsi, kā, vai man tas Tev jāstāsta. Un, kad poga nospiesta, un spiediens apstrādāts, atkal viss uz priekšu bez maz vai gadiem zināms.
 Pirmā un pēdējā rindkopa Tavā tekstā bija lieka. Tikpat labi tajās rakstīto varu attiecināt arī uz Tevi.

----------


## kaspich

tuksha muldeshana.

ko nozime - ilgi sezham paartraukumaa, var noguleet. uzdevumaa mineets - max 10us, kas atbilst 10 komandaam.
naakoshais - nemainot 8led aatrumu, tb, pat ne par komandu - shis kopaa JAU neiet - nav iespeejams [kaut Tev, protams, taads nieks buutu..].

ok, 50us [50komandas] taads nieks vien ir? o, jaa, un it iipashi, ja sagadaas 8led paartraukums/modificeeshana tieshi tajaa briidii, kad 9.led jaamodifice/japaarreekjina..

cilveek, skaidrs ir tas, ka shaada liimenja uzdevumus Tu neesi veicis. jo par galvenajaam lietaam Tu pat nerunaa. taa kartes ziimeeshana, ko mineeji sakumaa, ir beerna sljupsti, elementaara lieta, kas nekaadi nelidz atrisinaat shiis lietas..

..poka nashi koroblji borozdjat prostori vselennoi..

----------


## M_J

> p.s. reku uzdevumaa esmu ielicis 'nemainot aatrumu', kas varetu noziimeet -kljuda <1 cikls. kaa Tu TO realizeesi? 
> konkreeti sho 1 punktu, ludzu! m?


 Varbūt var palūgt precizēt kā saprast "-kljuda <1 cikls" vai tas ir domāts viens 4MHz kvarca periods vai kaut kas cits?

----------


## kaspich

periods ir periods. komandcikls. 1 pilna komanda.

----------


## M_J

> periods ir periods. komandcikls. 1 pilna komanda.


 Labi, te atkal atšķirība starp PIC un AVR. AVR tie komandu izpildes laiki ir atšķirīgi. Ja šie nosacījumi ir šādi, tad teorētiski ir iespējama situācija, kad 1. komandā jāieslēdz viena diode, nākošajā komandā nākošā un tā visas 8 pēc kārtas. Gribēju jau rakstīt, ka visas 9 diodes, nu bet uz to devīto varu neiespringt, tai Tu esi uzlicis daudz vājākas prasības. Vai mēs to varam izdarīt? Ar AVR varam ar komandu out un iepriekš sagatavotiem datiem reģistros kaut vai šādi
out PORTB,r15
out PORTB,r16
un tā tālāk...
 Komanda SBI neder, tā aizņem divus ciklus.
Vai ar PIC varam? Varam. Ar pēc kārtas sekojošām komandām BSF komandām, kur katra uzmet vienu bitu.
Nākošā situācija, piemēram pirmajā komandā jāieslēdz pirmā un trešā diode, nākošajā komandā otrā un ceturtā. Ar AVR to izdarām tāpat kā pirmajā gadījumā.
Kā būs ar PIC? Komanda BSF neder, tā uzmet tikai vienu bitu. Labi - ierakstīsim W iepriekš sagatavotu baitu un pēc tam ar MOVWF, to ierakstīsim portā. Nākošajā komandā būtu portā jāieraksta jau cita vērtība, kur divi biti ir izmainīti, BET - kā to izdarīt nākošās komandas laikā? Ja neizdaram, nosacījumus izpildīt nevaram. Aiznākošā komanda neder! 
 Varētu turpināt, kā es tālāk rīkotos ar AVR, šajā vietā ar AVR problēmu nav, bet gribētu zināt, kā Tu Kaspič atrisināsi šo situāciju ar PIC?
 Neapgalvoju 100%, ka šeit ir strupceļš, atkārtošu, sen neesmu ar PICiem darbojies, tāpēc gaidu Kaspiča risinājumu. Pēc tam turpināsim.

----------


## kaspich

nee, Tu tik un taa nerunaa par kritiskajam lietaam.  :: 
es nemaz neapskatu situaaciju, ja/kad taas 8 jamidzina ar 1mhz. njemsim kaut 1hz.

probleemas ir citur.
1. taatad, reakcijas laiks uz 9. LED - ne vairak kaa 10us. shim PIC taas ir 10 komandas. nevajag saliidzinaat ar 10X jaudiigaku AVR, nav korekti.
ok, PICam vajadzes:
ielekt INT [2kom.]
noteikt, kursh INT [tmro vai ports] 1..2kom.
uzstaadit portu: 1komanda

paliek 5 komandas kaut kam.

tagad domaajam taalak. muusu smukajam 8gba. LED NEDRIIKST mainities aatrums. shis nozimee, ka arii shiis LED jaadarbina ar INT peec tmro. ir ok, iznjemot vienu situaaciju.
ja sho 8gab. LED INT apstraades briidi kaads nospiezh pogu. kaa risinaat situaaciju tad? tad NAV laika apstraadaat shiis, izlekt no INT, un apstraadaat to.
ja shaadi uzdevuma nosaciijumi paliek speekaa, tad izskataas, ka shii tmro INT laikaa ik peec 8 komandaam jaaveic porta [kas attiecas uz 9. LED] INT bita paarbaude. un, ja to pamanam, bez domaashanas uzstaadam LED portu izejaa [lai nepaarsniegtu shiis 10us], un domaajam taalak.
arii shis isti neder, jo 1X uzstaadiijaam, vajadzeetu kadu check/apstiprinaajumu. ok, nevis vnk uzstadam, bet ejam subprogrammaa INT laikaa. vel +2komandas. taatad, paarbaude jaaveic ik peec 6 komandaam..

respektiivi, shaadu multitask gadiijumaa naanjem SLIKTAAKAIS gadiijums, situaacija, ja/kad visi taski sakriit vienlaicigi, un tad jaaspeej nodroshinaat katra taaska reakcijas laiks un precizitaate.
shajaa uzdevumaa task1 reakscijas dziters=0us, task2 rekacijas dziters=10us [max]. luuk, shii ir probleema. paarejais - saliidzinoshi pupu mizas.
veel ne gluzhi pupu mizas ir darbs ar timeru. Tev tas likaas vienkaarshi, mineeshu tikai dazhas situaacijas.

ok, mums ir 8bit.
vecaakaas [pienjemsim] simuleejam softiski. kad tmro0 paarpildaas, incf tmro1,1
9. LED jazibina asinhroni, taatad, lasam tmro0, tmro1 tajaa briidii, kad LED poga tika nospiesta [aciimredzot, atnjemot laiku, kas tika saskaitiits liidz shai salidzinaashanai]. stoop. te buus 1. probleeminja. shis laiks buus dazhaads, ja pa vidu patraapiisies 8 LED INT, vai shii te poga bus nospiesta kaadaa INT briidii.. taatad, te mees pachakarjamaies pamatiigi.

taalaak. shai 9. LED jaamirgo 3X. labaa zinja - dziters 50us jeb 50 komandas. te it kaa saspringums nav, tikai atkal - piedomaajam situaaciju, ja/kad shis 50 koamndas attiecas uz INT [prieksh 8 LED]. ja taisiisim tupa/kaa pec graamatas, taas 50 komandas beigsies LJOTI aatri.
2 uz INT [8 led]
4 uz INT source
jau jaacheko .led 
4 uz 9.check
2 lasam timer1
2 check
ok, sakriit, jaacheko tmro
3 tmro check
atkal check 9.
4 uz 9.check
u.t.t.
u.t.t. nu, un tad paskatam, vai tajas 50us vispaar ieklaujamies  ::

----------


## M_J

Galvenajos vilcienos piekrītu, tālāk šādas, tādas pārdomas.



> respektiivi, shaadu multitask gadiijumaa naanjem SLIKTAAKAIS gadiijums, situaacija, ja/kad visi taski sakriit vienlaicigi, un tad jaaspeej nodroshinaat katra taaska reakcijas laiks un precizitaate.
> shajaa uzdevumaa task1 reakscijas dziters=0us, task2 rekacijas dziters=10us [max]. luuk, shii ir probleema. paarejais - saliidzinoshi pupu mizas.


 Es pat teiktu, ka sliktākais gadījums ir nevis, kad visi taski sakrīt precīzi, bet seko cits citam ar minimālu nobīdi dažu komandu robežās. Nemaz nevajag pogas spiešanu, tāpat nav iespējams ieslēgt katru diodi precīzi paredzētajā laikā. Šeit ir jautājums, kāda ir pieļaujamā kļūda diožu ieslēgšanas momentam. Ja 0us - tad uz PIC uzdevums nav atrisināms. Ar AVR vēl varētu mēģināt, ar diviem kanāliem noteikti zinu, ka ir izdarāms, ar 4 - varētu sanākt, ar 8 - diez vai.



> ja shaadi uzdevuma nosaciijumi paliek speekaa, tad izskataas, ka shii tmro INT laikaa ik peec 8 komandaam jaaveic porta [kas attiecas uz 9. LED] INT bita paarbaude. un, ja to pamanam, bez domaashanas uzstaadam LED portu izejaa [lai nepaarsniegtu shiis 10us], un domaajam taalak.
> arii shis isti neder, jo 1X uzstaadiijaam, vajadzeetu kadu check/apstiprinaajumu. ok, nevis vnk uzstadam, bet ejam subprogrammaa INT laikaa. vel +2komandas. taatad, paarbaude jaaveic ik peec 6 komandaam..


  Piekrītu, ar mazu piebildi - kā apstiprinājumu, ka poga ir tikusi nospiesta varētu izmantot uzstādīto porta LED izeju. Kādu komandu ietaupīsim. Atšķirt gadījumus, kad izeja ir ieslēgta kā nekavējoša reakcija uz pogas nospiedienu vai notiek jau nākošo impulsu midžināšana, to taču varam. Momentu, kad ir notikusi pogas nospiešana gan varam noteikt tikai ar +/- kaut kādu precizitāti, ar kādu? - šeit atkal jāskaita komandas.



> 9. LED jazibina asinhroni, taatad, lasam tmro0, tmro1 tajaa briidii, kad LED poga tika nospiesta [aciimredzot, atnjemot laiku, kas tika saskaitiits liidz shai salidzinaashanai]. stoop. te buus 1. probleeminja. shis laiks buus dazhaads, ja pa vidu patraapiisies 8 LED INT, vai shii te poga bus nospiesta kaadaa INT briidii.. taatad, te mees pachakarjamaies pamatiigi.


 Protams, pačakarēšanās sanāks, kur nu bez tā, jāizvērtē cik dažādi varianti ir iespējami un, kā apstrādāt katru no tiem.
 Par tām 50 komandām - "spinnim mozgom cuvstvuju", ka jāpietiek. Ar AVR strādājot regulāri skaitu komandas un rēķinu laikus, 50 - tas tomēr ir daudz. Nu nav tas AT90S1200 desmit reizes stiprāks par 16F84, pat četras reizes diez vai būs. Protams, šī attiecība ir mainīga, atkarībā no tā, kādus uzdevumus liek veikt.

----------


## kaspich

nu re, beidzot nonaakam liidz kam patiesaakam :P

ok, piemetam taam 8LED nostraadashanas dziteru 50us, bet kopeejais periods un ilgterminaja faaze mainiities nedriikst!
nu gan shis uzdevums ir paveicams  ::

----------

