max6921 nic nezobrazuje

C,C++,C#

Moderátori: psichac, Moderátori

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1539
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

max6921 nic nezobrazuje

Príspevok od používateľa jirka.jirka. » 06 Jún 2014, 16:13

Ahoj kamarádi,
dneska mi přišel obvod max6921, ale nedaří se mi na něm nic zobrazit. Už do toho koukám docela dlouho a možná tu chybu už jenom přehlížím. Proto bych vás chtěl poprosit, jestli byste mi na ten můj jednoduchý kód nekoukli. Dík moc

knihovna SPI.H

Kód: Vybrať všetko

void InitSPI(void);
void WriteByteSPI(unsigned char byte);
unsigned char ReadByteSPI(void);

#define DD_SS     	PB4 	//LOAD
#define DD_MOSI   	PB5 	//DATA	
#define DD_MISO   	PB6 
#define DD_SCK     	PB7 	//SCK
#define SPI_DDR   	DDRB 
#define SPI_PORT   	PORTB
    
#define DESELECT()	PORTB &= ~(1 << PB4)	/* CS = L */
#define	SELECT()	PORTB |=  (1 << PB4)	/* CS = H */
knihovna SPI.C

Kód: Vybrať všetko

#include <avr/io.h>
#include "spi.h"

void InitSPI(void){
	
    SPI_PORT |= (1<<DD_SS) | (1<<DD_MISO);
    SPI_DDR &= ~ (1<<DD_MISO); 
    SPI_DDR |= (1<<DD_MOSI) | (1<<DD_SCK) | (1<<DD_SS); 
    //nastaveni registra SPI (SPCR), CPHA a CPOL v log 0
    SPCR    |= (1<<SPE) | (1<<MSTR) | (1<<SPR1); 
    SPCR &= ~ (1<<DORD);

}

void WriteByteSPI(unsigned char byte){
		
    SPDR = byte;					//Nahraje bajt do datoveho registru
    while(!(SPSR & (1<<SPIF))); 	// Kontroluje ukonceni prenosu
}

unsigned char ReadByteSPI(void)
{
	SPDR = 0xFF;					//Nahraje bajt do datoveho registru
	while(!(SPSR & (1<<SPIF))); 	//Kontroluje ukonceni prenosu
	return SPDR;                	// navratova hodnota - prijata data
}
A nakonec můj kód.

Kód: Vybrať všetko

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include "spi.h"

int main (void){

	InitSPI();		//inicializace SPI

	while(1){

	SELECT();       		//Pin LOAD do 1
	WriteByteSPI(0x18); 	//Mrizka          
	WriteByteSPI(0x5C);		//cislo
	DESELECT();     		//Pin LOAD do 0

	PORTB |= (1 << PB3);	//Pin BLANK do 1
	
	_delay_ms(100);			//prodleva 100ms
	}	
	return 0;  
}
Jako jediný problém který vidím je, že si nejsem jistý, zda můžu takto po sobě odeslat data do toho MAXe.

Kód: Vybrať všetko

WriteByteSPI(0x18); 	//Mrizka          
WriteByteSPI(0x5C);		//cislo
0

NySher
Pokročilý člen
Pokročilý člen
Príspevky: 566
Dátum registrácie: 25 Aug 2009, 00:00
Bydlisko: ZH / ZA
Vek: 30

Re: max6921 nic nezobrazuje

Príspevok od používateľa NySher » 06 Jún 2014, 17:04

Blbosť... z diagramu na strane 8 toho datasheetu vyplýva že najprv musíš poslať dáta a potom poslať impulz na LOAD aby sa prijaté dáta zobrazili a BLANK vstup musí byť na 0 ináč sú výstupy vypnuté...

Opps toto som si nevšimol:
1) Take CLK low.
2) Clock 20 bits of data in order D19 first to D0 last
into DIN, observing the data setup and hold times.
3) Load the 20 output latches with a falling edge
on LOAD.
Tak je to jedno či je LOAD pred alebo počas celého prenosu setnutý... ale ten BLANK na konci programu musí byť 0 nie 1...
0
:)

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1539
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Re: max6921 nic nezobrazuje

Príspevok od používateľa jirka.jirka. » 06 Jún 2014, 17:25

Tak jsem to upravil, zde je kód:

Kód: Vybrať všetko

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include "spi.h"

int main (void){

	InitSPI();		//inicializace SPI
	PORTB &= ~(1 << PB3);	//Pin BLANK do 1

	while(1){
	
		WriteByteSPI(0x00); 	//Mrizka          
		WriteByteSPI(0x18);		//cislo

		SELECT();
		DESELECT();		//pulz na pinu LOAD

		_delay_ms(100);			//prodleva 100ms
	}	
	return 0;  
}
Tak jsem to projel a studeňák tam není. Prostě nějak divně to reaguje. Mám to na nepájivém poli, tažené kabely max 20cm a jakmile se přiblížím ke kabelu, tak to funguje. Jinak nesvítí nic. Nesetkal se s tímto někdy někdo?
0

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1539
Dátum registrácie: 17 Okt 2008, 00:00
Bydlisko: Uherské Hradiště
Kontaktovať používateľa:

Re: max6921 nic nezobrazuje

Príspevok od používateľa jirka.jirka. » 22 Jún 2014, 21:08

Opět jsem se dostal k MAX6921 a problém jsem našel a opravil. Stalo se to, že MCU nedokázal dopře uzemnit pin BLANK, tak jsem připojil tranzistor a už vše pěkně funguje. :)

Dávám to sem proto, kdyby náhodou někdy někdo pracoval s MAX6921, tak se může vyhnout dlouhému hledání problému. :)
0

Hinsi

Re: max6921 nic nezobrazuje

Príspevok od používateľa Hinsi » 22 Jún 2014, 23:52

To je mi ňáká pekelná blbost :D

Vstup BLANK je úplně normální CMOSový vstup, se zatěžovacím proudem do 10uA, a logickou nulou standardních 0,3xVcc.

Napísať odpoveď