Heeft iemand eens gewerkt met een max6952 die op zijn beurt wordt aangestuurd door bv een PIC18F4620

Ik krijg dat ding niet aan de gang.

Iemand een voorbeeld in CCS-C
of andere C variant

Op 6 maart 2006 18:46:44 schreef The Puma:
Ik krijg dat ding niet aan de gang.

Kan je je probleem niet wat beter beschrijven?

Ik ken niets van PIC's, maar spreek je wel hetzelfde SPI-taaltje? De MAX6952 werkt met 16 bits commando's, dus let op dat je je /CS signaal niet terug hoog maakt tussen de twee 8 bits die je doorstuurt.

Is er je RC-oscillator aangesloten (C op OSC-ingang) en werkt die?

Verder kan je eventueel je Maxim-IC aansluiten op je LPT-poort van je PC (als je die nog hebt) om hem te testen. Een testprogramma en andere info vind je op hun website.

Ik vrees dat je niet zomaar een kant en klare oplossing gaat vinden...

Succes ermee

<max6952.h>

#ifndef MAX6952_CS

#define MAX6952_CS PIN_C0
#define MAX6952_CLK PIN_C3
#define MAX6952_DOUT PIN_C4
#define MAX6952_DIN PIN_C5

#endif

// Register address map
#define NO_OP 0x00 // Used when cascading max6952s
#define INTENSITY10 0x01 // Intensity register
#define INTENSITY32 0x02 // Intensity register
#define SCAN_LIMIT 0x03 // Scan-limit register
#define CONFIGURATION 0x04 // Configuration register
#define USER_DEFINED_FONTS 0x05 //
#define FACTORY_RESERVED 0x06 // Factory reserved
#define DISPLAY_TEST 0x07 // Display-test register
#define DIGIT_0_PLANE_P0 0x20 //
#define DIGIT_1_PLANE_P0 0x21 //
#define DIGIT_2_PLANE_P0 0x22 //
#define DIGIT_3_PLANE_P0 0x23 //
#define DIGIT_0_PLANE_P1 0x40 //
#define DIGIT_1_PLANE_P1 0x41 //
#define DIGIT_2_PLANE_P1 0x42 //
#define DIGIT_3_PLANE_P1 0x43 //
#define WRITE_DIGIT_0_PLANE_P0_P1 0x60 //
#define WRITE_DIGIT_1_PLANE_P0_P1 0x61 //
#define WRITE_DIGIT_2_PLANE_P0_P1 0x62 //
#define WRITE_DIGIT_3_PLANE_P0_P1 0x63 //

// Configuration register
#define SHUTDOWN_MODE 0x00 // Shutdown Control (data bit D0)
#define NORMAL_MODE 0x01
#define SLOW_BLINK 0x00 // Blink rate selection (data bit D2)
#define FAST_BLINK 0x01
#define BLINK_FUNCTION_DISABLED 0x00 // Global blink enable/disable (data bit D3)
#define BLINK_FUNCTION_ENABLED 0x01
#define BLINK_TIMING_COUNTERS_UNAFFECTED 0x00 // Global blink timing synchronization (data bit D4)
#define BLINK_TIMING_COUNTERS_RESET 0x01
#define DIGIT_DATA_PLANES_P0_P1_UNAFFECTED 0x00 // Global clear digit data (data bit D5)
#define DIGIT_DATA_PLANES_P0_P1_CLEARED 0x01
#define P1_BLINK_PHASE 0x00 // Blink phase readback (data bit D7)
#define P0_BLINK_PHASE 0x01

// Scan-limit register
#define DISPLAY_DIGITS_01 0x00 // Display digits 0 & 1
#define DISPLAY_DIGITS_0123 0x01 // Display digits 0 1 2 3

// Intensity register digit 0 and digit 2
#define DIG_0_DIG_2_DUTY_CYCLE_1 0x00 // Intensity min
#define DIG_0_DIG_2_DUTY_CYCLE_2 0x01
#define DIG_0_DIG_2_DUTY_CYCLE_3 0x02
#define DIG_0_DIG_2_DUTY_CYCLE_4 0x03
#define DIG_0_DIG_2_DUTY_CYCLE_5 0x04
#define DIG_0_DIG_2_DUTY_CYCLE_6 0x05
#define DIG_0_DIG_2_DUTY_CYCLE_7 0x06
#define DIG_0_DIG_2_DUTY_CYCLE_8 0x07
#define DIG_0_DIG_2_DUTY_CYCLE_9 0x08
#define DIG_0_DIG_2_DUTY_CYCLE_10 0x09
#define DIG_0_DIG_2_DUTY_CYCLE_11 0x0A
#define DIG_0_DIG_2_DUTY_CYCLE_12 0x0B
#define DIG_0_DIG_2_DUTY_CYCLE_13 0x0C
#define DIG_0_DIG_2_DUTY_CYCLE_14 0x0D
#define DIG_0_DIG_2_DUTY_CYCLE_15 0x0E
#define DIG_0_DIG_2_DUTY_CYCLE_16 0x0F // Intensity full

// Intensity register digit 1 and digit 3
#define DIG_1_DIG_3_DUTY_CYCLE_1 0x00 // Intensity min
#define DIG_1_DIG_3_DUTY_CYCLE_2 0x01
#define DIG_1_DIG_3_DUTY_CYCLE_3 0x02
#define DIG_1_DIG_3_DUTY_CYCLE_4 0x03
#define DIG_1_DIG_3_DUTY_CYCLE_5 0x04
#define DIG_1_DIG_3_DUTY_CYCLE_6 0x05
#define DIG_1_DIG_3_DUTY_CYCLE_7 0x06
#define DIG_1_DIG_3_DUTY_CYCLE_8 0x07
#define DIG_1_DIG_3_DUTY_CYCLE_9 0x08
#define DIG_1_DIG_3_DUTY_CYCLE_10 0x09
#define DIG_1_DIG_3_DUTY_CYCLE_11 0x0A
#define DIG_1_DIG_3_DUTY_CYCLE_12 0x0B
#define DIG_1_DIG_3_DUTY_CYCLE_13 0x0C
#define DIG_1_DIG_3_DUTY_CYCLE_14 0x0D
#define DIG_1_DIG_3_DUTY_CYCLE_15 0x0E
#define DIG_1_DIG_3_DUTY_CYCLE_16 0x0F // Intensity full

// Display-test register
#define NORMAL_OPERATION 0x00 // Normal operation
#define DISPLAY_TEST_MODE 0x01 // Display-test mode, all leds on

void max_mode() {
output_low(MAX6952_CS);
spi_write(CONFIGURATION);
spi_write(NORMAL_MODE);
output_high(MAX6952_CS);
}

void scan_limit1() {
output_low(MAX6952_CS);
spi_write(SCAN_LIMIT);
spi_write(DISPLAY_DIGITS_01);
output_high(MAX6952_CS);
}

void blink() {
output_low(MAX6952_CS);
spi_write(CONFIGURATION);
spi_write(4);
output_high(MAX6952_CS);
}

void intensity(short intens) {
output_low(MAX6952_CS);
spi_write(INTENSITY10);
spi_write(intens);
output_high(MAX6952_CS);
}

void max_put(int8 teken) {
output_low(MAX6952_CS);
spi_write(DIGIT_0_PLANE_P0);
spi_write(teken);
output_high(MAX6952_CS);
}

<max6952.c>
#include <18F4620.h>
#use delay(clock=20000000)
#fuses HS,NOWDT,NOBROWNOUT,NOPUT,NOLVP,DEBUG,NOSTVREN,NOPROTECT

#include <max6952.h>
#include <kbd.h>

int8 i;
char k;

void main() {

setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_16);

max_mode();
scan_limit1();
blink();
intensity(DIG_0_DIG_2_DUTY_CYCLE_12);

while(1) {
max_put(68);

}
}

Probleem is dat ie het soms doet,
dus niet altijd.

IS de code zo goed?

Heb je code niet nagelezen, maar als die het soms doet denk ik eerder aan storingen...

Probeer eens met zo kort mogelijke verbindingen (leg eventueel een massadraadje parallel aan je signaaldraden).
Probeer eventueel eens de frequentie van de SPI bus eens te verlagen.

Heb je de voeding van je MAXIM-IC goed ontkoppeld? Dikke ELCO en kleine C 100nF dichtbij de voedingspinnen van je IC (zie datasheets)?

Welke is de voedingspanning van je MAX6952 en van je PIC?

De voedingsspanning komt af van het development board

5v regulator gekoelt