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)

he ook al bezig :p

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

iemand met wat voorbeeldcode?

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?

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 :D

Robbert

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!

ik ben toevallig net begonnen aan het visual basic programma. ik zal hem online zetten waneer hij af is.

Robbert

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... 

wacht eens even, mijn oog valt zojuist op dit zinnetje:

__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _RC_OSC

ik denk dat ik die standaard-configuratiezin in dat templatfile maar eens ga veranderen |:(
(ik vergeet altijd die _RC_OSC te veranderen)

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...

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.

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%)]

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

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.

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)

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!