Fórum témák
- • Vásárlás, hol kapható?
- • LED-es világítás
- • Vicces - mókás történetek
- • Kombikazán működési hiba
- • DC-DC konverter
- • Elfogadnám, ha ingyen elvihető
- • Elektronikus szulfátoldó (Akku aktivátor)
- • Erősítő mindig és mindig
- • Felajánlás, azaz ingyen elvihető
- • Napelem alkalmazása a lakás energia ellátásában
- • Eaton E5 650i USB fogyasztás mérés probléma
- • Elektromos kerékpár, robogó házilag
- • Érdekességek
- • AVR-es alkatrész (tranzisztor) teszter
- • Villanyszerelés
- • Klíma beszerelése, fűtés-hűtés házilag
- • Klíma szervizelés, javítás
- • Ki hol gyártatja a NYÁK-ot ?
- • Csőtermosztát bekötése
- • NYÁK terv ellenőrzése
- • Szárítógép problémák
- • Hangsugárzó építés, javítás - miértek, hogyanok
- • BMS 4 bekötése 8 cellára
- • Akkumulátoros fúró
- • LCD TV probléma
- • Frekvenciaváltó
- • 555-ös IC-vel lehet-e?
- • SONY TA-F 590ES MOSFET végfok átalakítása
- • ZC-18 kazán
- • Tápegységgel kapcsolatos kérdések
- • Parkside akkuk javìtása
- • Számítógép hiba, de mi a probléma?
- • Kapcsolási rajzot keresek
- • EAGLE NYÁK tervező
- • TDA7294 végerősítő
- • Villanypásztor
- • Leválasztó transzformátor
- • Elektroncső
- • Gyors hőmérséklet mérés tapintó érzékelővel ellátott műszerrel
- • Főzőlap hiba
- • Gázkazán vezérlő hibák
- • Elektroncső-vizsgáló berendezés
- • Kávéfőzőgép hiba
- • PC táp átalakítás
- • Szobatermosztát bekötése
- • Lítium akummulátor bővítése
- • Mosógép vezérlők és általános problémáik
- • Proteus
- • Keringető szivattyú
- • Arduino
- • Codefon kaputelefon
- • Skoda Octavia elektromos probléma
- • EVSE áramkör - elektromos autó töltésvezérlő
- • Rádióamatőrök topikja
- • Transzformátor készítés, méretezés
» Több friss téma
|
Fórum » PIC programozás assemblyben
Akkor egy 32 bites szám egyes Byte-jai így is kiszámolhatóak:
#define szam .84083201
#define f (szam/.65536)
#define a (szam-f*.65536)
#define b0 low(a)
#define b1 high(a)
#define b2 low(f)
#define b3 high(f)
24 bites számokkal nem volt gondom, de 32 bitessel előjött valamiféle számítási hiba. Sajnos nem emlékszem már milyen.
Koszonom, szoval nincs direkt lehetoseg. Csak erdekes, hogy ha dw van...
Bell: "Ha egy kellene" alatt az 1db 32 bites szamot ertettem...
Ha nem előjeles, akkor lehetne egy makrót írni, ami tetszőleges sorrendben leteszi db/dw direktívákkal.
Mint lentebb, a 32 bites számot 4 darab 8 bitesre (b0,.. b3) alakíthatod, amit jól kezel az MPASM.
Sziasztok!
Újabb nonszenszbe futottam bele az adó-vevő kapcsán.
Ha a szinkronjel (500 usec) után mindössze egy byteot küldök, és ellenőrzöm, hogy az érkezett-e meg ami kell, több mint 20 méter a hatótáv, stabil kapcsolattal.
Ha három byteot küldök, 5 méter után, a távolság növekedésével egyre többször érkeznek hibás adatok.
Ha már öt byte az adat, a stabil kapcsolat távolsága 1 méter alá esik. Mi okozhatja ezt?
A konkrét program ismerete nélkül ezt senki sem fogja Neked megmondani.
Pl. primitív protokoll, zavarérzékeny gagyi RF modul, időzítési hibák tömkelege, stb..
Érdemes lenne menet közben az RF modul kimenetét hallhatóvá tenni, szkóppal rámérni.
Szia!
A vevő AGC fokozatát zavarja, hogy az adás egyenszintje nem állandó. Próbáld ki, hogy az adatot Manchester kóddá lalakítva küldöd át. Ebben a kódolásban a DC szint állandó lesz. Esetleg az is megoldása lehet, hogy az egyes adat byte -ok után a negáltjukat küldöd át. Ekkor a DC szint két byte -ra átlagolva lesz állandó.
Egy kis segítség. A hozzászólás módosítva: Okt 18, 2015
Szia!
Amit a DC szintről írtál, azt értem.
De az adat negát átküldésétől csak az eredő szint lesz állandó. Adás közben végig változik.
A Manchester kódolással viszont az a problémám, hogy nem jöttem rá, hogyan tudnám dekódolni.
Legyen a távitat:
0x55, 0x55, 0x55 , 0xAA, adatbyte1, neg(adatbyte1), adatbyte2, neg(adatbyte2), adatbyte3, neg(adatbyte3), chksum, neg(chksum)
Ekkor minden páros sorszámon kezdődő egymás utáni két byte -os egységre a DC szinit azonos lesz. Az egymást követő 0x55, x055, 0xAA -ról felismerhető a távirat kezdete.
Manchester kódolásra és dekodolásra példa. A hozzászólás módosítva: Okt 18, 2015
Sziasztok!
Segítsséget szeretnék kérni. Elakadtam egy egyszerű timer vezérelt megszakítással.
Egyszerűen nem történik meg a megszakítás.
Inicializálás ide vonatkozó része:
MOVLW B'01000000'
MOVWF INTCON
MOVLW B'00000001'
MOVWF T1CON
BSF PIE1
BSF IPR1
A CBLOCK:
CBLOCK
KAR_KOD ; Kiirandó karakter kódja
KESLELTETES ; Kiírás id?zít?je
LEPES ; Lépésszám kontrol
VETEL : 2 ; Kiolvasandó byte-ja és negátja
CIKLUS1
CIKLUS2
SZAMLALO : 2
MB1
ENDC
A megszakítási indítása:
org 0x0000
nop
GOTO START
org 0X0008
GOTO MEGSZAKITAS
nop
org 0x0028
nop
START
CALL INICIALIZALAS
A megszakítási rutin:
MEGSZAKITAS
MOVLW D'56'
MOVWF TMR1L
BCF PIR1,0
RRNCF VETEL
BTFSC PORTA,0
BSF VETEL,7
BTFSS PORTA,0
BCF VETEL,7
BSF MB1,0
RETFIE
Az ide vonatkozó programrészlet:
MOVLW D'63'
MOVWF TMR1L
BCF PIR1,0
BSF INTCON,7
BYTE_FOGADAS
BCF MB1,0
NOP
BTFSS MB1,0 ;Amíg nincs megszakítás, itt kell várjon.
GOTO $-2 ;A baj az, hogy nem jön megszakítás.
DECFSZ CIKLUS1
GOTO BYTE_FOGADAS
MOVFF VETEL,POSTINC0
DECFSZ CIKLUS2
GOTO BYTE_SZINKRON
GOTO KILEP
BYTE_SZINKRON
BCF INTCON,7
BTFSS PORTA,0
GOTO $-2
BTFSC PORTA,0
GOTO $-2
MOVLW D'58'
MOVWF TMR1L
BCF PIR1,0
BSF INTCON,7
MOVLW D'8'
MOVWF CIKLUS1
GOTO BYTE_FOGADAS
KILEP
BCF INTCON,7
Hol hibáztam?
Milyen PIC? A megszakításnál ORG?
PIC18F14K22.
Magas prioritású megszakítás címe 0x0008
Alacsony prioritású megszakítás címe 0x0018
Hát a megszakítás része elég fura nekem. Én tanultam:
org 0x0000
goto Start
org 0x0008
ige jön a megszakítási rutin
retfie
Start
ide jön a program eleje
Ha mellékelnéd az egész asm-et, könnyebb lenne segíteni. A hozzászólás módosítva: Okt 24, 2015
Eddig oké!
De a megszakítási rutin nem lóghat bele az alacsony prioritású megszakítás kezdőcímébe.
Ez most pont ideférne, de így szoktam meg.
Viszont amit csak most vettem észre, hogy az org-nál nagy x-et, írtam. Ez befolyásolhat valamit?
A program többi része nem befolyásolja ezt a részt. Itt kellene bekapcsolódnia a megszakításnak, és a rutin végén letiltásra kerül. Timer1 sincs máshol használva, ahogy PORTA,0 sem.
PORTA,0-ra szorgalmasan érkeznek a jelek, tehát csak azért ragadhat be itt a program, mert timer1 nem vált ki megszakítást. De nem értem, hogy miért?
Nem tudom, hogy befolyásol-e, de nem hinném. A fordító úgyis kiabál ha nem stimmel. Tedd fel az asm-et vagy küld el mélbe, mert így sötétbe tapogatózás csak.
Ez egy kisérlet 1 vezetékes adattovábbításra, kétsoros kijelző számára.
Előszőr kiír egy szöveget, ami a programmemóriában van eltárolva,
majd belép a Jelfigyelés rutinba, és addig ott van, míg nem kap újabb képernyőtartalmat.
;*-----------------------------------------------------------------------------*
;* 1-Wire adatúton kapott szöveg kiírása kétsoros kijelz?re *
;* Létrehozva:2015.10.22. *
;*-----------------------------------------------------------------------------*
INCLUDE <P18F14K22.INC> ; includde fájlok megadása
RADIX hex ; alapértelmezet számrendszer megadása
CONFIG FOSC = IRC ; bels? oszcillátor
CONFIG WDTEN = OFF ; watchdog bekapcsolása
CONFIG LVP = OFF ; alacsony feszültség? programozás kikapcsolva
CONFIG MCLRE = OFF ; RA3 bemenetkénti használatra állítása
CBLOCK
KAR_KOD ; Kiirandó karakter kódja
KESLELTETES ; Kiírás id?zít?je
LEPES ; Lépésszám kontrol
VETEL : 2 ; Kiolvasandó byte-ja és negátja
CIKLUS1
CIKLUS2
SZAMLALO : 2
MB1
ENDC
#define UTASITAS BCF LATA,1
#define ADAT BSF LATA,1
#define ENABLE LATA,2
DELAY MACRO SZAMLALO_INDUL
MOVLW SZAMLALO_INDUL
MOVWF KESLELTETES
DECFSZ KESLELTETES
GOTO $-2
ENDM
org 0x0000
nop
GOTO START
org 0x0008
GOTO MEGSZAKITAS
nop
org 0x0028
nop
START
CALL INICIALIZALAS
;-------------------------------------------------------------------------------
MAIN
MOVLW D'32'
MOVWF LEPES
CLRF TBLPTRU
MOVLW H'10'
MOVWF TBLPTRH
CLRF TBLPTRL
CLRF FSR0H
MOVLW D'101'
MOVWF FSR0L
ADAT_INDIT
TBLRD*+
MOVFF TABLAT,POSTINC0
DECFSZ LEPES
GOTO ADAT_INDIT
CALL SZOVEG
;-------------------------------------------------------------------------------
JELFIGYELES
MOVLW D'32' ;A szakasz elején feltölti a 2-es
MOVWF CIKLUS2 ;ciklusszámlálót, az érkező byte-ok számával.
MOVLW D'8' ;Az 1-es ciklusszámlálót pedig a byte-on
MOVWF CIKLUS1 ;belüli bit-ek számával.
CLRF FSR0H ;Megcímezzük a ramterületet, ahová az érkező
MOVLW D'101' ;byte-okat tárolni fogjuk.
MOVWF FSR0L
SZINKRONJEL ; Második szakasz
BTFSS PORTA,0 ;Egy indító jelre vár.
GOTO $-2
BTFSC PORTA,0
GOTO $-2
MOVLW D'63' ;Betölt egy értéket tmr1-be, törli a flag
MOVWF TMR1L ;bitet, majd bekapcsolja a megszakítást.
BCF PIR1,0
BSF INTCON,7
BYTE_FOGADAS
BCF MB1,0
NOP
BTFSS MB1,0 ;Amíg nincs megszakítás, itt kell várjon.
GOTO $-2 ;A baj az, hogy nem jön megszakítás.
DECFSZ CIKLUS1
GOTO BYTE_FOGADAS
MOVFF VETEL,POSTINC0
DECFSZ CIKLUS2
GOTO BYTE_SZINKRON
GOTO KILEP
BYTE_SZINKRON
BCF INTCON,7
BTFSS PORTA,0
GOTO $-2
BTFSC PORTA,0
GOTO $-2
MOVLW D'58'
MOVWF TMR1L
BCF PIR1,0
BSF INTCON,7
MOVLW D'8'
MOVWF CIKLUS1
GOTO BYTE_FOGADAS
KILEP
BCF INTCON,7
CALL SZOVEG
GOTO JELFIGYELES
;-------------Szöveg kiolvasása memóriából, és kiírása kijelz?re----------------
SZOVEG
MOVLW D'16' ;
ADDWF LEPES ;
UTASITAS ;------------------------------------------------
MOVLW B'00000001' ;
CALL KIIRAS ; Ez a rutin átkapcsolja a kijelz?t utasítás
DELAY D'250' ;fogadására. Ezt követ?en törli a kijelz?t, majd
DELAY D'250' ;rövid kivárás után beállítja a fels? sor kezd?-
MOVLW B'10000000' ;címét, ezután visszaálítja adatfogadásra.
CALL KIIRAS ;
ADAT ;------------------------------------------------
CLRF FSR0H
MOVLW D'101'
MOVWF FSR0L
VERS1 ;------------------------------------------------
MOVF POSTINC0,W
CALL KIIRAS
DECFSZ LEPES
GOTO VERS1
MOVLW D'16' ;
ADDWF LEPES ;
UTASITAS ;(Egy szövegmez? hossza a memóriában 32 byte)
MOVLW B'11000000' ; Ezután beállítjuk az alsó sor kezd?címét.
CALL KIIRAS ;
ADAT ;------------------------------------------------
VERS2 ;------------------------------------------------
MOVF POSTINC0,W
CALL KIIRAS
DECFSZ LEPES
GOTO VERS2
RETURN
;------------------------------INICIALIZALAS------------------------------------
INICIALIZALAS
CLRF LATA ; kimeneti portok törlése
CLRF LATB ;
CLRF LATC ;
MOVLW B'00000000' ; bemenetek 1=analóg 0=digitális
MOVWF ANSEL
MOVLW B'00000000' ; bemenetek 1=analóg 0=digitális
MOVWF ANSELH ;
MOVLW B'00000001' ; A port
MOVWF TRISA
MOVLW B'00000000' ; B port kimenet
MOVWF TRISB
MOVLW B'00000111' ; C port kimenet
MOVWF TRISC
MOVLW B'01000010' ; oszcillátor frekvenciája <4:6>
MOVWF OSCCON ; 2 MHz
MOVLW B'01000000'
MOVWF INTCON
MOVLW B'00000001'
MOVWF T1CON
BSF PIE1
BSF IPR1
;---------------------------------------------------------------------------*
LCD ;kijelz? inicializálása
BCF ENABLE ;Beírás tiltása
BSF LATC,3
DELAY D'250'
DELAY D'250'
DELAY D'250'
DELAY D'250'
DELAY D'250'
DELAY D'250'
DELAY D'250'
DELAY D'250'
UTASITAS ;Beállítjuk a kijelz? R/S bemenetét utasítás fogadására
MOVLW B'00110000' ;Ez az utasítás 4x végrehajtva reseteli az LCD-t
CALL KIIRAS0
CALL KIIRAS0
CALL KIIRAS0
CALL KIIRAS0
DELAY D'250' ;Némi kivárás után be kell állítani a kijelz?t.
MOVLW B'00100000'
CALL KIIRAS0 ;Itt kapcsolunk át 4 bites üzemmódra
MOVLW B'00101000' ;Már 4 bites módban beállítjuk a
CALL KIIRAS ; kijelz?t kétsorsa
MOVLW B'00001100' ;Kijelz? engedélyezése
CALL KIIRAS
RETURN
;-------------------------------------------------------------------------------
KIIRAS
MOVWF KAR_KOD ;Wreg áttöltése KAR_KOD-ba
MOVFF KAR_KOD,LATB ;KAR_KOD LATB-be töltése(Csak a fels? 4 bit)
DELAY D'2' ;El? várakozás
BSF ENABLE ;Beírás indul
DELAY D'4' ;Kivárás
BCF ENABLE ;Beírás vége
SWAPF KAR_KOD ;Megcseréli KAR_KOD els? és második 4-4 bitjét
MOVFF KAR_KOD,LATB ;KAR_KOD LATB-be töltése(Csak a fels? 4 bit)
DELAY D'2' ;El? várakozás
BSF ENABLE ;Beírás indul
DELAY D'4' ;Kivárás
BCF ENABLE ;Beírás vége
RETURN
KIIRAS0 ;Kijelz? reszetelésekor használatos
MOVWF LATB ;Karakter b-be töltése
DELAY D'2' ;El? várakozás
BSF ENABLE ;Beírás indul
DELAY D'4' ;Kivárás
BCF ENABLE ;Beírás vége
RETURN
;-------------------------------------------------------------------------------
MEGSZAKITAS
MOVLW D'56'
MOVWF TMR1L
BCF PIR1,0
RRNCF VETEL
BTFSC PORTA,0
BSF VETEL,7
BTFSS PORTA,0
BCF VETEL,7
BSF MB1,0
RETFIE
;-------------------------------------------------------------------------------
org 0x1000
DB " Kijelzo kiserlet! "
;-------------------------------------------------------------------------------
END
Ez így le sem fordul.... Az itteni 166, 167 sorból hiányzik, hogy melyik bitet szeretnéd állítani.
A 166, 177 sornál nálam jelezne, hiányzik a 0.
Jogos!
Ez pár perce még így nézett ki:
MOVLW B'01000000'
MOVWF INTCON
MOVLW B'00000001'
MOVWF T1CON
MOVLW B'00000001'
MOVWF PIE1
MOVLW B'00000001'
MOVWF IPR1
CSak közben is próbálkozok mindennel.
Akkor is kelle a Timer1 megszakítás, ha a PORTA,0 még nem jött jel?
Én leszimuláltam és az INTCON, GIE piszkálása volt a baj kiszedtem akkor a szimulátor is generált megszakítást, amíg bent volt a BCF INTCON, GIE .. BSF INTCON, GIE addig nem.
Nekem az a fura, hogy a Timer1 már a program elején indítva van, de a megszakítás engedélyezése, csak jóval később, miután PORTA,0-nál már bejött egy jel. Addig csak megy magában, viszont ha azon túlmegy akkor egyből megszakításba megy mert a flag bit már rég 1-ben van.
Ha a 162,163 sorba ezt írom:
movlw b'11000000'
movwf INTCON
Egyből van Timer1 megszakítás. A hozzászólás módosítva: Okt 24, 2015
Pont az a lényeg, hogy csak akkor legyen megszakítás, ha már az indítójel bejött. A flagbitet pedig még az előtt törlöm, hogy a megszakítást bekapcsolnám. Megpróbáltam már fordítva is, hogy a megszakítás folyamatosan legyen aktív, és timer1-et tiltom. De úgy sem működik. Miért?
Értem. Szimulátorban ez így pedig működik, viszont ha ez az elképzelés, akkor nem csak a TMR1L-et kellene feltölteni egy értékkel, mert az Isten tudja, hogy a TMR1H mennyi lesz, mire bejön az első jel.
Lehet, hogy rávezettél a hibára!
Én ugyanis timer 1-et 8 bites módban akartam üzemeltetni. Így aztán várhatom a megszakítást. Holnap lepróbálom timer2-vel. Majd megírom az eredményt.
Amikor a TMR1L-t feltöltöd, töltsd fel a TMR1H-t b'11111111'-val és akkor csak az alsónak kell elszámolnia 255-ig a megszakításhoz. De csinálhatod TIMER0-val is, az csak 8 bites alapból.
Ha pontos megszakításokat akarsz akkor ez jól jöhet: Bővebben: Link A hozzászólás módosítva: Okt 24, 2015
Szia!
Timer2-vel hibátlan.
Ráadásul még egyszerűbb is, mert nem kell értékkel feltölteni, mivel PR2-vel meghatározható, hogy meddig számoljon.
Most így néz ki:
MOVLW B'01000010' ; oszcillátor frekvenciája <4:6>
MOVWF OSCCON ; 2 MHz
CLRF T2CON
BSF IPR1,1
BSF PIE1,1
BCF PIR1,1
MOVLW D'197'
MOVWF PR2
MOVLW B'11000000'
MOVWF INTCON
MEGSZAKITAS
BCF PIR1,1
RRNCF VETEL
BTFSC PORTA,0
BSF VETEL,7
BTFSS PORTA,0
BCF VETEL,7
BSF MB1,0
RETFIE
JELFIGYELES
MOVLW D'32' ;A szakasz elején feltölti a 2-es
MOVWF CIKLUS2 ;ciklusszámlálót, az érkező byte-ok számával.
MOVLW D'8' ;Az 1-es ciklusszámlálót pedig a byte-on
MOVWF CIKLUS1 ;belüli bit-ek számával.
CLRF FSR0H ;Megcímezzük a ramterületet, ahová az érkező
MOVLW D'101' ;byte-okat tárolni fogjuk.
MOVWF FSR0L
SZINKRONJEL ; Második szakasz
BTFSS PORTA,0 ;Egy indító jelre vár.
GOTO $-2
BTFSC PORTA,0
GOTO $-2
BSF T2CON,2
CLRF TMR2
BCF PIR1,1
BYTE_FOGADAS
BCF MB1,0
NOP
BTFSS MB1,0 ;Amíg nincs megszakítás, itt kell várjon.
GOTO $-2
DECFSZ CIKLUS1
GOTO BYTE_FOGADAS
MOVFF VETEL,POSTINC0
DECFSZ CIKLUS2
GOTO BYTE_SZINKRON
GOTO KILEP
BYTE_SZINKRON
BCF T2CON,2
BTFSS PORTA,0
GOTO $-2
BTFSC PORTA,0
GOTO $-2
BSF T2CON,2
CLRF TMR2
MOVLW D'8'
MOVWF CIKLUS1
GOTO BYTE_FOGADAS
KILEP
BCF T2CON,2
CALL SZOVEG
GOTO JELFIGYELES
Ráadásul elég komoly szórást is elvisel.
PR2 értéke 191-202-ig állítható. Tehát 197-re állítva +-2,5%-os frekvenciaszórást elvisel.
Köszi mindenkinek a segítsséget!
Idézet: „Nem segít a bádogtető lejtésének emelése, ha jó nagy lyuk van rajta.”
Ilyen szép, szemléletes műszaki hasonlatot nem hallottam az elmúlt félszáz évben... (Esetleg az "Eccerű, mint a faék" fogható hozzá.)
Sziasztok!
Kérlek, segítssetek!
Adott egy PIC18F46K22-es microcontroller.
Az a problémám vele, hogy a D port bemenetnek konfigurált lábai valamiért nem érzékelik a magas szintet. Az A, a B, és a D port egy része bemenet. Fizikailag ugyan úgy vannak felépítve. Közvetlen a PIC lábain mérve, ha egy bemenet sem aktív, a felhúzóellenállások által mérhető a tápfeszültség. Ha egy bemenet aktív, 0V van a lábon. Ehhez képest ha D port megfelelő lábait lekérdezem, mindegy mi van rajtuk, alacsony szintet mutatnak.
Ezek a beállítások:
INCLUDE <P18F46K22.INC> ; includde f??jlok megad??sa
RADIX hex ; alap?©rtelmezet sz??mrendszer megad??sa
CONFIG FOSC = INTIO67 ; bels? oszcill??tor
CONFIG WDTEN = OFF ; watchdog bekapcsol??sa
CONFIG LVP = OFF ; alacsony fesz??lts?©g? programoz??s kikapcsolva
CONFIG MCLRE = EXTMCLR ; RA3 bemenetk?©nti haszn??latra ??ll?t??sa
CONFIG PBADEN = OFF
INICIALIZALAS
CLRF LATA ; kimeneti portok törlése
CLRF LATB ;
CLRF LATC ;
CLRF LATD
CLRF LATE
MOVLW B'00000011'
MOVWF ANSELA
MOVLW B'00111000' ; A port
MOVWF TRISA
MOVLW B'00111100' ; B port
MOVWF TRISB
CLRF WPUB
MOVLW B'00000000' ; C port
MOVWF TRISC
MOVLW B'00011111' ; D port
MOVWF TRISD
CLRF ANSELD
MOVLW B'00001000' ; E port
MOVWF TRISE
MOVLW B'01010010' ; oszcillátor frekvenciája <4:6>
MOVWF OSCCON
MOVLW B'10000111' ; timer 0 beállítása, el?osztó <2:0>
MOVWF T0CON
Mi nem jó? A hozzászólás módosítva: Nov 10, 2015
|
|