DanielBakker
Quidquid latine dictum sit, altum viditur
ik ben bezig met microcontrollers en wil nu met geluid gaan werken. romanblack lijkt me wel een leuke methode, alleen: er is nergens iets van voorbeeldcode, en ook geen duidelijke uitleg hoe ik de .ASM file nu eigenlijk in mijn programma moet gaan inbouwen. kan iemand mij hiermee helpen? (het lieftst met voorbeeldcode)
Robbertbd
robotica rules :D
he ook al bezig 
ben er ook aan bezig geweest maar ligt momenteel even stil.
ik wilde een visual basic progje maken om de binaire data uit de asm file te versturen.
dan kan een pic ze in een eerpom stoppen.
Robbert
Summiere uitleg: http://www.romanblack.com/btc_alg.htm
DanielBakker
Quidquid latine dictum sit, altum viditur
oke, ik heb het gelezen, en begrijp het al iets beter maar niet helemaal. romanblack goiit er een blok code uit, zoals dit:
retlw b'00010010' ; 12
retlw b'10011101' ; 9d
retlw b'01010101' ; 55
retlw b'01010101' ; 55
retlw b'01010101' ; 55
retlw b'01010101' ; 55
retlw b'01010101' ; 55 nou is het de bedoeling dat mijn programma dus 1 voor 1 die bits naar een pin stuurt. ik ga er van uit dat ik daarvoor de rotate throug carry moet gebruiken, en dan de carry naar een pin te kopieren, maar hoe krijg ik dan 1 zo'n retlw-blok in mijn W?
ik moet waarschijnlijk op de een of andere manier met een call gaan werken, maar hoe?
en er moet natuurlijk met een precieze snelhied die bits naar die pin gaan, anders vervormd het geluid. zou iemand mij misschien met bijv. voorbeeldcode kunnen helpen?
Robbertbd
robotica rules :D
je moet de bits inderdaad bitje voor bitje naar de uitgang sturen met de frequentie die boven in het asm file staat.
welke programeer taal gebruikje voor je microcontrollers? ik denk dat je het beste de bits per 8 bit (1 byte) in een eeprom kan laden en die dan met een uC uit leest. het eeprom is snel zat. je zal alleen een methode moeten vinden om die bits in je eeprom te krijgen. ik ben nog steeds van plan een visual basic programmatje te schrijven dat serieel de bits naar een uC staaurt die ze weer in een eeprom laad maar ik heb momenteel vakantie en ben met van alles bezig behalve elektronice 
Robbert
DanielBakker
Quidquid latine dictum sit, altum viditur
o wacht, die frequentie staat er boven...
(ik heb m'n lenzen niet in..)
dan ga ik maar eens stoeien met wat ideen om dat dan af te spelen.
bedankt!
Robbertbd
robotica rules :D
ik ben toevallig net begonnen aan het visual basic programma. ik zal hem online zetten waneer hij af is.
Robbert
DanielBakker
Quidquid latine dictum sit, altum viditur
ben ik weer. ik heb wat code geschreven, en volgens de simulator van mplab moet dat zo werken. het vervelende is, dat doet het niet. ik heb even een ledje aangesloten i.p.v.
een speaker, en ik ben er achtergekomen dat het programma wel werkt, maar hij gaat verschrikkelijk traaaag. normaal hoort er 5000 keer per seconde een nieuw bitje naar de uitgang geschreven te worden, maar nu duurt iedere bit
+/- een halve minuut. je begrijpt, dat is mij iets te langzaam. heeft iemand enig idee hoe dat komt?
list p=16f77 ; list directive to define processor
#include <p16f77.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _RC_OSC
; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.
;***** VARIABLE DEFINITIONS
PCLATHTEMP EQU 0x22
PCLTEMP EQU 0x21
WTEMP EQU 0x23
;**********************************************************************
ORG 0x000 ; processor reset vector
clrf PCLATH ; ensure page bits are cleared
goto main ; go to beginning of program
main
BANKSEL TRISB
CLRF TRISB
BANKSEL PORTB
MOVLW 0x96
MOVWF PCLTEMP
CLRF PCLATHTEMP
CALL TRIPOD ;HET JUISTE ADRES WORDT IN DE STACK GELADEN
;--------------------------------------------
;HET GELUID WORDT NAAR DE JUISTE PIN VERWEZEN
;--------------------------------------------
MOVWF WTEMP
BTFSC WTEMP,7
GOTO SETB
GOTO CLEARB
SETB
BSF PORTB, 1
GOTO DELAY
CLEARB
BCF PORTB, 1
GOTO DELAY
DELAY
MOVLW 0xF7
MOVWF 0x24 ;988 CYCLES TE GAAN
WEER
nop
DECFSZ 0x24, 1
GOTO WEER
;--------------------------
;VOLGENDE BIT WORDT GELADEN
;--------------------------
RLF WTEMP, 1
BTFSC WTEMP,7
GOTO SETB1
GOTO CLEARB1
SETB1
BSF PORTB, 1
GOTO DELAY1
CLEARB1
BCF PORTB, 1
GOTO DELAY1
DELAY1
NOP
MOVLW 0xC6
MOVWF 0x24 ;990 CYCLES TE GAAN
WEER1
nop
nop
DECFSZ 0x24, 1
GOTO WEER1
;--------------------------
;VOLGENDE BIT WORDT GELADEN
;--------------------------
RLF WTEMP, 1
BTFSC WTEMP,7
GOTO SETB2
GOTO CLEARB2
SETB2
BSF PORTB, 1
GOTO DELAY2
CLEARB2
BCF PORTB, 1
GOTO DELAY2
DELAY2
NOP
MOVLW 0xC6
MOVWF 0x24 ;990 CYCLES TE GAAN
WEER2
nop
nop
DECFSZ 0x24, 1
GOTO WEER2
;--------------------------
;VOLGENDE BIT WORDT GELADEN
;--------------------------
RLF WTEMP, 1
BTFSC WTEMP,7
GOTO SETB3
GOTO CLEARB3
SETB3
BSF PORTB, 1
GOTO DELAY3
CLEARB3
BCF PORTB, 1
GOTO DELAY3
DELAY3
NOP
MOVLW 0xC6
MOVWF 0x24 ;990 CYCLES TE GAAN
WEER3
nop
nop
DECFSZ 0x24, 1
GOTO WEER3
;--------------------------
;VOLGENDE BIT WORDT GELADEN
;--------------------------
RLF WTEMP, 1
BTFSC WTEMP,7
GOTO SETB4
GOTO CLEARB4
SETB4
BSF PORTB, 1
GOTO DELAY4
CLEARB4
BCF PORTB, 1
GOTO DELAY4
DELAY4
NOP
MOVLW 0xC6
MOVWF 0x24 ;990 CYCLES TE GAAN
WEER4
nop
nop
DECFSZ 0x24, 1
GOTO WEER4
;--------------------------
;VOLGENDE BIT WORDT GELADEN
;--------------------------
RLF WTEMP, 1
BTFSC WTEMP,7
GOTO SETB5
GOTO CLEARB5
SETB5
BSF PORTB, 1
GOTO DELAY5
CLEARB5
BCF PORTB, 1
GOTO DELAY5
DELAY5
NOP
MOVLW 0xC6
MOVWF 0x24 ;990 CYCLES TE GAAN
WEER5
nop
nop
DECFSZ 0x24, 1
GOTO WEER5
;--------------------------
;VOLGENDE BIT WORDT GELADEN
;--------------------------
RLF WTEMP, 1
BTFSC WTEMP,7
GOTO SETB6
GOTO CLEARB6
SETB6
BSF PORTB, 1
GOTO DELAY6
CLEARB6
BCF PORTB, 1
GOTO DELAY6
DELAY6
NOP
MOVLW 0xC6
MOVWF 0x24 ;990 CYCLES TE GAAN
WEER6
nop
nop
DECFSZ 0x24, 1
GOTO WEER6
;--------------------------
;VOLGENDE BIT WORDT GELADEN
;--------------------------
RLF WTEMP, 1
BTFSC WTEMP,7
GOTO SETB7
GOTO CLEARB7
SETB7
BSF PORTB, 1
GOTO DELAY7
CLEARB7
BCF PORTB, 1
GOTO DELAY7
DELAY7
NOP
MOVLW 0xC6
MOVWF 0x24 ;990 CYCLES TE GAAN
WEER7
nop
nop
DECFSZ 0x24, 1
GOTO WEER7
;------------------------------------------
;HET VOLGENDE RETLW BLOK WORDT GESELECTEERD
;------------------------------------------
INCFSZ PCLTEMP, 1
GOTO DOOR
INCF PCLATHTEMP, 1
DOOR
MOVF PCLATHTEMP, 0
MOVWF PCLATH
MOVF PCLTEMP, 0
MOVWF PCL
;------------------------------------------
;EN WE VLIEGEN NAAR HET VOLGENDE RETLW BLOK
;------------------------------------------
TRIPOD
ORG 0x96
retlw b'10010101' ; 95
retlw b'01010101' ; 55
retlw b'01010101' ; 55
retlw b'01010101' ; 55
retlw b'01011010' ; 5a
retlw b'01010101' ; 55
retlw b'00101010' ; 2a
enz... DanielBakker
Quidquid latine dictum sit, altum viditur
wacht eens even, mijn oog valt zojuist op dit zinnetje:
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _RC_OSCik denk dat ik die standaard-configuratiezin in dat templatfile maar eens ga veranderen 
(ik vergeet altijd die _RC_OSC te veranderen)
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Het is ook beter om de code wat meer gestructureerd te maken. In plaats van
DECFSZ 0x24,1
kun je beter schrijven
DECFSZ MijnVariabele, f
Anders maak je snel fouten, de code wordt onleesbaar, en als je de code over een jaar terugziet heb je eerst een week nodig om uit te vogelen wat er allemaal gebeurt...
DanielBakker
Quidquid latine dictum sit, altum viditur
dat zal ik veranderen, is inderdaad wel beter. maar dat (zonder naam) heb ik alleen gedaan bij de registers die gebruikt worden bij de delay routine, niet echt een deel van de code wat moeilijk te begrijpen is.
DanielBakker
Quidquid latine dictum sit, altum viditur
nou, ik heb de code in de pic geprogrammeerd, maar het werkt nog niet helemaal (helemaal niet).
ik hoor een hoop geruis, wat wel in volume veranderd met het volume van het af te spelen geluid (dus af te spelen geluid harder -> ruis harder).
heeft iemand een fout kunnen ontdekken in de code? ik heb het schema gemaakt zoals het in het ASM bestand staat wat romanblack uitspuugt.
ik heb trouwens een WAV bestand gebruikt van 5000Hz (5000 nieuwe waardes per seconde).
kan iemand controleren of ik de snelheid van mijn programma goed heb gedaan? hij draait op 20MHz
[Bericht gewijzigd door Henry S. op (20%)]
Robbertbd
robotica rules :D
je kan met de frequentie de delais uit rekenen. dan kan je voor de zekkerheid met je timer meten tussen twee punten en dan kijken of het klopt.
je moet de frequentie gebruiken die het programma gebruikt. en je moet even kijken welce cap en weerstand je moet gebruiken aan de uitgang.
die veranderd per wav type.
Robbert
DanielBakker
Quidquid latine dictum sit, altum viditur
die delays heb ik uitgerekend, maar welke timer bedoel je?
ik heb trouwens de frequentie gebruikt die het programma gebruikt. en ik heb natuurlijk de rc waardes gebruikt die het programma aangeeft.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Over het algemeen is er niet zo veel voordeel te behalen met de roman black methode.
Voor bv. 8 KHz samplerate heb je ongeveer 64 Kbit/sec nodig om een vergelijkbaar resultaat te krijgen.
Zie ook dit topic met commentaar van Roman Black zelf (= Blackman)
DanielBakker
Quidquid latine dictum sit, altum viditur
oke, dus vandaar dat het geluid (als je het al zo mag noemen) zo waardeloos klinkt.
ik werk nu met 5Kbit/sec, niet echt geweldig dus...
maar bedankt!