Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MSP40F449 LCD модуль
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
tvilsa
Всем привет! Решил поиграться с MSP430F449 контроллером. подключил к экрану с тройным мультиплексированием.
записываю подправленный код из примера
Код
//*****************************************************************************
//  Description: Displays "6543210" on MSP-EVK430S320 LCD.
//  ACLK = LFXT1 = 32768Hz, MCLK = SMCLK = default DCO = 32 x ACLK = 1048576Hz
//  //* An external watch crystal between XIN & XOUT is required for ACLK *//    
//
//                                Connections MSP430 -> LCD
//                                -------------------------
//
//                                             T.I. MSP-EVK430S320
//                            MSP430F449       6.5 digit 4 mux LCD
//                                                   #T218010
//                      /|\ ---------------       --------------
//                       | |          COM3 |-----|2    COM4     |
//                       --|RST       COM2 |-----|1    COM3     |
//                         |          COM1 |-----|3    COM2     |
//                         |          COM0 |-----|4,20 COM1     |
//                        -|XIN       SEG0 |-----|19            |
//                    32kHz|          SEG1 |-----|18            |
//                        -|XOUT      SEG2 |-----|17            |
//                         |          SEG3 |-----|16            |
//                         |          SEG4 |-----|15            |
//                         |          SEG5 |-----|14            |
//                         |          SEG6 |-----|13            |
//                         |          SEG7 |-----|12            |
//                       +-|R33       SEG8 |-----|11            |
//                    840k |          SEG9 |-----|10            |
//                       +-|R23       SEG10|-----|9             |
//                    840k |          SEG11|-----|8             |
//                       +-|R13       SEG12|-----|7             |
//                    840k |          SEG13|-----|6             |
//                       +-|R03       SEG14|-----|5 (bits C,E,H |
//                       | |               |     |   of digit 7)|
//                      Vss ---------------       --------------
//

//*****************************************************************************
#include  <msp430x44x.h>


void main(void)
{
  volatile unsigned int i;                  // Use volatile to prevent removal
                                            // by compiler optimization

  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  FLL_CTL0 |= XCAP14PF;                     // Configure load caps
  for (i = 0; i < 10000; i++);              // Delay for 32 kHz crystal to
                                            // stabilize

  LCDCTL = LCDON + LCD3MUX + LCDSG0_2;      // LCD on, 3-Mux, segments S0-S19
  BTCTL = BT_fLCD_DIV32;                   // LCD clock freq
  P5SEL = 0xFF;                             // Select P5.0-7 as Com and Rxx
    unsigned char x;



    for (x=0; x<9; x++)
    {
      LCDMEM[x] = 0;                
    }
  }

потом через отладчик меняю содержимое LCDMEM и смотрю что на экране.
Проблема в том что все символы на экране ели светятся. почти не видно.
при этом в режиме STATICLCD сегменты отражаются ярко.
Между можками R03,R13,R23,R33 включены резисторы на 800кОм.
Причем в режиме STATICLCD при наличии резисторов тоже ели видно, а при отключенных нормально.
Помогите пожалуйста разобраться с этими резисторами. не пойму зачем они и какой номинал поставить.
Заранее спасибо.
Shread
Попробуйте поиграться номиналами резисторов. У нас стояли 430к, и впараллель с каждым их нижних резисторов кондеры 0.1 - было более менее. Сейчас перестали использовать 4хх, вместо этого заказываем жки со встроенным драйвером ML1001 - статика, она и в Африке статика и брака по платам меньше стало))
tvilsa
Спасибо. Попробывал по 470кОм. все также. Гуру подскажите как выбираются эти сопротивления, а то из даташита не пойму ни как.
Shread
Конденсаторы пробовал ставить? Это просто резистивный делитель, для получения промежуточных уровней напряжения, по даташиту номиналы резисторов должны быть от 100к до 1м, мы попробовали когда-то для нашего жки и остановились на 430к.
tvilsa
Поставил кондеры по 0.1 стало еще тусклее. ярко светит если на ногу R33 подать+5В. Может экранчик на 5В расчитан?
Shread
Цитата(tvilsa @ Dec 17 2010, 14:48) *
Поставил кондеры по 0.1 стало еще тусклее. ярко светит если на ногу R33 подать+5В. Может экранчик на 5В расчитан?

А кто крое вас это знает?) Но этак можно и проц кончить.
tvilsa
Ктож его знает? :-) На халяву достался. И так ноги методом тыка искал. Странно что в режиме статика он ярко работает от 3.3В. Вот в чем вопрос.
Уже переменники поставил крутил и так и сяк все не срастается. Либо все ярко светят независимо от включенных элементах, либо не видно ничего, либо какието ярко а другие серые.
Andrejka
Доброго времени суток. Помогите подсказкой как перенастроить LCD порт. Процессор MSP430F4260, + 2 цыферный 7 сегментный дисплей, управление - статика, организация подключения такова(MSP<-->LCD):S0-1e, S1-1d, S2-1c, S3-2c, S4-2d, S5-2e, S6-2g, S7-2f, S8-2a, S9-2b, S10-1b, S11-1a, S12-1f, S13-1g, COM-com. Из-за разводки платы возникла необходимость программно перевернуть местами знакоместа(т.е. S0-2e, S1-2d ...) Буду благодарен за любые подсказки. Программа написана на асме в среде IAR.

Код
#include  <msp430x42x0.h>      
;------------------------------------------------------------------------------
            ORG     0A000h                 ; program start for MSP430F4260
;------------------------------------------------------------------------------
RESET       mov.w   #300h, SP              ; initialize stack pointer
            mov.w   #WDTPW+WDTHOLD, &WDTCTL; stop WDT
            bis.b   #XCAP14PF, &FLL_CTL0   ; set load capacitance for xtal
            mov.b   #LCDON + LCDSTATIC + LCDFREQ_128, &LCDACTL; static, ACLK/128
            mov.b   #0x0F, &LCDAPCTL0      ; configure s0-s13 for LCD

            clr.b   &P6OUT                 ; configure all ports for output
            mov.b   #0xFF, &P6DIR
            clr.b   &P5OUT
            mov.b   #0x1C, &P5DIR
            mov.b   #0x10, &P1OUT          ; preset CS=0 and CLK=1
            mov.b   #0xBF, &P1DIR          ; enable input at P1:6

            mov.b   #7, R15                ; 7 LCD memory bytes to clear
            clr.b   LCDMEM-1(R15)          ; clear display
            dec.b   R15      
            jnz     $ - 6              

            mov.b   #0x27, &BTCTL          ; basic timer1 setup ACLK/2^(16)
            clr.b   &BTCNT1                ; clear counters
            clr.b   &BTCNT2
            bis.b   #BTIE, &IE2            ; enable timer interrupt

            clr.w   R6                     ; old temperature
loop        bis.b   #BIT5, &P1OUT          ; set CS=1 to start conversion

            mov.b   #0x24, &BTCTL          ; sleep for 0.256 sec to complete
            bis.w   #LPM3 | GIE, SR        ; temp. conversion
            mov.b   #0x27, &BTCTL          ; set next timer event in 2sec

            bic.b   #BIT5, &P1OUT          ; set CS=0 and terminate conversion
            bic.b   #BIT4, &P1OUT          ; set CLK=0 and prepare for output

            clr.w   R5
            mov.b   #10, R15               ; setup input bits counter
get_bit     bis.b   #BIT4, &P1OUT          ; CLK = 1
            bit.b   #BIT6, &P1IN           ; C = input bit
            rlc     R5                     ; rotate it into R5
            bic.b   #BIT4, &P1OUT          ; CLK = 0
            dec.b   R15
            jnz     get_bit

            bis.b   #BIT4, &P1OUT          ; set CLK = 1

            bit.w   #BIT9, R5              ; temp < 0 ?
            jz      add1                   ; NO - treate is as positive
            bis.w   #0xFC00, R5            ; sign extend negative temp
            dec.w   R5                     ; rounding off negative temp
            jmp     $+4
add1        inc.w   R5                     ; rounding off non-negative temp
            rra.w   R5                     ; compute integer part in R5
            
            cmp.w   R5, R6                 ; do not process temp if it is
            jeq     sleep                  ; the same as earlier            
            mov.w   R5, R6                  ; update old temp value

            call    #bin2BCD8              ; compute BCD in R4
            call    #display               ; display temp

sleep       bis.w   #LPM3 | GIE, SR        ; enter the LPM3 mode (sleep)
            jmp     loop

            
;;;;;;;;;;;;;;;;;;;;;;;;;PROCEDURES::::::::::::::::::::
bt1_ISR     bic.w   #LPM3, 0(SP)           ; return from sleep (ISR)
            reti

bin2BCD8    mov.w   R5, R15                ; copy input number
            bit.w   #BITF, R15        
            jz      check_up
            inv.w   R15                    ; negate number if it is negative
            inc.w   R15
            cmp.w   #9, R15                ; display "-_" if the temp below
            jl      check_up               ; -9C
            mov.b   #0xBB, R4
            ret
            
check_up    cmp     #100, R15              ; exit if the number exceeds 99
            jl      process
            mov.b   #0xAA, R4
            ret

process     clr.w   R4                     ; prepare the result
            mov.b   #8, R14                ; loop cnt = # of bits

b2b_loop    rla.b   R15                    ; use the decimal addition
            dadd.b  R4, R4                 ; operation to convert the byte
            dec.b   R14                    ; into BCD
            jnz     b2b_loop               ; we assume byte value <= 99
            bit.w   #BITF, R5
            jz      $ + 6
            bis     #0xB0, R4              ; add the minus sign
            ret

display     mov.b   R4, R14                ; display a value in R4 on LCD
            mov.b   R4, R15
            and.b   #0x0F, R14             ; extract right digit in R14
            rla.b   R14
            rla.b   R14                    
            add.w   #right_digit, R14      ; R14 = address in right table
            clrc
            rrc.b   R15
            rra.b   R15                    
            and.b   #0xFC, R15
            add.w   #left_digit, R15       ; R15 = address in left table

            mov.b   @R15+, &LCDM2          ; write table data to LCD
            mov.b   @R15+, &LCDM3
            mov.b   @R15+, &LCDM4
            mov.b   @R15,  &LCDM5
            mov.b   @R14+, &LCDM1
            add.b   @R14+, &LCDM2
            mov.b   @R14+, &LCDM6
            mov.b   @R14,  &LCDM7
            ret

right_digit DW      0x0111                 ; digit 0 (LCDM1 part)
            DW      0x1110                 ; digit 0 (LCDM6 part)
            DW      0x0100                 ; digit 1 (LCDM1 part)
            DW      0x0010                 ; digit 1 (LCDM6 part)
            DW      0x0011                 ; digit 2 (LCDM1 part)
            DW      0x0111                 ; digit 2 (LCDM6 part)
            DW      0x0110                 ; digit 3 (LCDM1 part)
            DW      0x0111                 ; digit 3 (LCDM6 part)
            DW      0x0100                 ; digit 4 (LCDM1 part)
            DW      0x1011                 ; digit 4 (LCDM6 part)
            DW      0x0110                 ; digit 5 (LCDM1 part)
            DW      0x1101                 ; digit 5 (LCDM6 part)
            DW      0x0111                 ; digit 6 (LCDM1 part)
            DW      0x1101                 ; digit 6 (LCDM6 part)
            DW      0x0100                 ; digit 7 (LCDM1 part)
            DW      0x0110                 ; digit 7 (LCDM6 part)
            DW      0x0111                 ; digit 8 (LCDM1 part)
            DW      0x1111                 ; digit 8 (LCDM6 part)
            DW      0x0110                 ; digit 9 (LCDM1 part)
            DW      0x1111                 ; digit 9 (LCDM6 part)
            DW      0                      ; the overline symbol
            DW      0x0100                  
            DW      0x0010                 ; the underline symbol
            DW      0
            
left_digit ;DW      0x1110                 ; digit 0 (LCDM2 part)
           ;DW      0x1110                 ; digit 0 (LCDM4 part)
            DW      0                      ; do not display leading 0
            DW      0
            DW      0x0010                 ; digit 1 (LCDM2 part)
            DW      0x1000                 ; digit 1 (LCDM4 part)
            DW      0x1100                 ; digit 2 (LCDM2 part)
            DW      0x1101                 ; digit 2 (LCDM4 part)
            DW      0x0110                 ; digit 3 (LCDM2 part)
            DW      0x1101                 ; digit 3 (LCDM4 part)
            DW      0x0010                 ; digit 4 (LCDM2 part)
            DW      0x1011                 ; digit 4 (LCDM4 part)
            DW      0x0110                 ; digit 5 (LCDM2 part)
            DW      0x0111                 ; digit 5 (LCDM4 part)
            DW      0x1110                 ; digit 6 (LCDM2 part)
            DW      0x0111                 ; digit 6 (LCDM4 part)
            DW      0x0010                 ; digit 7 (LCDM2 part)
            DW      0x1100                 ; digit 7 (LCDM4 part)
            DW      0x1110                 ; digit 8 (LCDM2 part)
            DW      0x1111                 ; digit 8 (LCDM4 part)
            DW      0x0110                 ; digit 9 (LCDM2 part)
            DW      0x1111                 ; digit 9 (LCDM4 part)
            DW      0                      ; the overline symbol
            DW      0x0100                  
            DW      0                      ; the - symbol
            DW      0x0001
            
;------------------------------------------------------------------------------
;           Interrupt Vectors
;------------------------------------------------------------------------------
            ORG     0x0FFE0                ; basic timer 1 vector
            DW      bt1_ISR

            ORG     0x0FFFE                ; RESET Vector
            DW      RESET                  ;
            END
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.