Programma voor ledkubus

ik heb ongeveer een jaar geleden een led kubus van 3x3x3 gemaakt maar ben toen niet aan programmeren toegekomen. nu heb ik dit kleine programmatje geschreven. jammergenoeg werkt het niet. kan iemand mij helpen. ik kan een beetje programmeren in c# maar van c, c++ en assambly ken ik eigenlijk. ik heb op internet wel wat gevonden
hier een schematje en de code
http://www.uploadarchief.net/files/download/plan.jpg

pic asm code:

   
                ORG     00h
		INCLUDE	p16f627a.inc
init	        BSF	STATUS,RP0
		BCF	PCON,OSCF
		MOVLW	0x00
		MOVWF	PORTB
		BCF	STATUS,RP0
begin	        COMF	PORTA
		BSF	PORTB,RB0
		BSF	PORTB,RB1
		BSF	PORTB,RB2
		BSF	PORTB,RB3
laag1	        BSF	PORTB,RB7
		NOP
		BCF	PORTB,RB7
laag2	        BSF	PORTB,RB6
		NOP
		BCF	PORTB,RB6
laag3	        BSF	PORTB,RB5
		NOP
		BCF	PORTB,RB5
		GOTO	laag1
		END
Nil volentibus arduum | Niets is onmogelijk voor hen die willen
Arco

Special Member

Wat wil je dat de code doet met de leds? (wat moet aan en wat moet uit)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

in het deeltje met label begin krijgen alle 9 de collommen een signaal. daarna bij label laag 1 krijgt de transistor van laag 1 een signaal zodat de stroom kan wegvloeien en die laag oplicht. dan wacht hij even en gaat die transistor weer uit en gaat de volgende, bij het label laag 2, aan. en zo verder voor de 3 lagen. dan begint hij weer bij label laag 1.

Nil volentibus arduum | Niets is onmogelijk voor hen die willen

Op 23 juli 2014 14:46:58 schreef superkiller528:
dan wacht hij even

1 nop instructie is wel iets korter dan even.
Dan gaat de pic zo snel door de loop heen dat je er niets van merkt.
Beter vervang je ze voor een echte delay met een langere tijd.

Arco

Special Member

Een NOP duurt bij 20MHz maar 200nS (0.0000002 sec.)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

dat een nop heel kort is weet ik. in mijn programma staan er dan ook heel veel maar die heb ik er even uitgeknipt om het overzichtelijk te maken. zien jullie echt niets anders waardoor het niet zou werken??

Nil volentibus arduum | Niets is onmogelijk voor hen die willen
Arco

Special Member

Nauwelijks een 'programma' te noemen.
- Initialisatie ontbreekt geheel. (trisa en b registers worden o.a. nooit op output gezet, comparators niet uitgeschakeld.)
- Config fuses zijn er niet.
- Niet rommelen met de RPx bits in STATUS. Gebruik de banksel macro, die is er voor...

Gebruik de template file voor de 628a die bij MPAsm zit als je begint, dan heb je al een (goede) startopzet.
En maak een delay routine.

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Is BSF BCF niet een Read-Modify-write operatie?

Dan kan je zo voor verassingen komen te staan als je dat doet op een poort.

Je kan beter een schaduwregister gebruiken, daarin zet je de juiste bits met bsf,bcf en dat register zet je terug op de poort met een Xor?

Xor is ook een read-modify-write instructie. Dan moet je het schaduwregister in z'n geheel met een MOVW wegzetten.

Los van deze read-modify-write details: voordat je iets zinnigs met een microcontroller kunt uitvoeren, moet je eerst zijn peripherals (=ingebouwde hardware, zoals ADC, timers, UARTs etc) configureren.
In de datasheet van jouw PIC-model (ik kan niet precies lezen welke je hebt gekozen, maar dat maakt niet zoveel uit) staat bijvoorbeeld een overzicht van alle I/O-registers, in tabelvorm.
Bij elk register wat daar genoemd staat, moet je jezelf even afvragen hoe je dit register geconfigureerd wilt hebben (bijvoorbeeld 'pin B2 als uitgang', of 'AD-converter uitgeschakeld'). Dus ook voor de peripherals die je helemaal niet wilt gaan gebruiken.
Er staat ook bij wat de default-waarde van deze registers na power-up is.
Als die twee waardes afwijken, moet je sowieso het betreffende register bovenin je code goed zetten.
Zelf heb ik mij aangewend om niet af te hangen van de power-up defaults, maar om gewoon alle registers van de juiste waarde te voorzien. Dat kost een paar bytes code extra, maar voorkomt verwarring.

Ik was er al niet zeker van het is even geleden dat ik iets in ASM gedaan heb.

dan is het idd Xor op het schaduw register en dan een MOVF naar de uitgang.

Arco

Special Member

Zoals eerder gezegd rammelt de code zo hard aan alle kanten dat 'ie sowieso niet werkt...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

ik gebruikt een pic16f627a.

kunnen jullie mij helpen dit wel te laten werken of kan ik het beter in c of zo proberen??

Nil volentibus arduum | Niets is onmogelijk voor hen die willen
Henry S.

Moderator

Welke programmeertalen ken je?

73's de PA2HS - ik ben een radiohead, De 2019 CO labvoeding.

Lees de startpost eens, henry.... [edit. Sorry Henry, Ik had een beetje scheef gelezen. Toen ik DIT schreef dacht ik even dat ie WEL C snapte.... Maar goed. uiteindelijk is de startpost toch te lezen als antwoord op je vraag...]

Ik weiger naar "assembly" te kijken. Als je C zou gebruiken kijk ik er (misschien) naar (ik heb ook een hekel aan PICs, dus ik weet nog niet wat er wint... :-) )

[Bericht gewijzigd door rew op vrijdag 25 juli 2014 19:01:33 (33%)

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Arco

Special Member

...Ik weiger naar "assembly" te kijken.

Je moet er ook niet naar kijken, maar mee werken... ;)

Heb wat initialisatie/banksel erbij gestopt (template gebruikt). Niet geprobeerd, ik heb geen ledkubus...
Config moet je nog nakijken of die voor jou goed staat.
En een delay toevoegen, een NOP heb je niks aan.

pic asm code:


;**************************************************************************************************
; This file is a basic code template for assembly code generation on the PIC16F627A. This file 
; contains the basic code building blocks to build upon.                                   
; Refer to the MPASM User's Guide for additional information on features of the assembler (DS33014)
; Refer to the respective PIC data sheet for additional information on the instruction set.        
;**************************************************************************************************
; Files Required: P16F627A.INC                                     
;**************************************************************************************************
	list      p=16f627A           				; list directive to define processor
	#include <p16F627A.inc>       				; processor specific variable definitions
	errorlevel  -302              				; suppress message 302 from list file

	__CONFIG   _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT 

; '__CONFIG' directive is used to embed configuration word within .asm file.
; The lables following the directive are located in the respective .inc file.
; See data sheet for additional information on configuration word settings.

;***** VARIABLE DEFINITIONS
w_temp          EQU     0x7E        				; variable used for context saving 
status_temp     EQU     0x7F        				; variable used for context saving

;**************************************************************************************************
		ORG     0x000           				; processor reset vector
		goto    main            				; go to beginning of program

		ORG     0x004           				; interrupt vector location
		movwf   w_temp          				; save off current W register contents
		movf	STATUS,w        				; move status register into W register
		movwf	status_temp     				; save off contents of STATUS register

; isr code can go here or be located as a call subroutine elsewhere

		movf    status_temp,w   				; retrieve copy of STATUS register
		movwf	STATUS          				; restore pre-isr STATUS register contents
		swapf   w_temp,f
		swapf   w_temp,w        				; restore pre-isr W register contents
		retfie                  				; return from interrupt

;**************************************************************************************************
main
                banksel PCON
		BCF		PCON,OSCF
 
                banksel CMCON							; Comparators off
                MOVLW   0x07
                MOVWF   CMCON
 
                banksel TRISA							; All outputs
                CLRF    TRISA
                CLRF    TRISB

                banksel PORTB
		CLRF	PORTA
		CLRF	PORTB

begin	COMF	PORTA
		BSF		PORTB,RB0
		BSF		PORTB,RB1
		BSF		PORTB,RB2
		BSF		PORTB,RB3
laag1	BSF		PORTB,RB7
		NOP
		BCF		PORTB,RB7
laag2	BSF		PORTB,RB6
		NOP
		BCF		PORTB,RB6
laag3	BSF		PORTB,RB5
		NOP
		BCF		PORTB,RB5
		GOTO	laag1
		END

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

wanneer ik een nieuw programma wil maken kan ik dan dit gewoon copieren en dan het stukje vanaf het label begin aanpassen of moet ik dan ook nog andere dingen aanpassen?
hoe kan ik een pin als input zetten?

[Bericht gewijzigd door superkiller528 op vrijdag 25 juli 2014 19:30:36 (10%)

Nil volentibus arduum | Niets is onmogelijk voor hen die willen
Arco

Special Member

Hangt er vanaf wat je gaat doen (of je inputs of outputs, comparators, a/d, enz. nodg hebt.)
Kale template files staan in de MPAsm template directory.

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Henry S.

Moderator

Op 25 juli 2014 18:52:03 schreef rew:
Lees de startpost eens, henry.... [edit. Sorry Henry, Ik had een beetje scheef gelezen. Toen ik DIT schreef dacht ik even dat ie WEL C snapte.... Maar goed. uiteindelijk is de startpost toch te lezen als antwoord op je vraag...]

Ha, je hebt gelijk, classificeer mijn vraag meteen maar onder de catagorie overbodige vragen.

Daaruit is mijn conclusie dat de TS bijna vanaf 0 begint, maar hij kan vanuit zijn C# kennis plain C eerder begrijpen dan ASM als het geen C# knip-plakcursus geweest is.

Ik weiger naar "assembly" te kijken.

Assembly is opzich prima, maar alleen in assembly schrijven is voor mij een vorm van zelfkastijding.

73's de PA2HS - ik ben een radiohead, De 2019 CO labvoeding.