реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> USART
ILYAUL
сообщение Jul 26 2011, 08:43
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(MaUrJIu @ Jul 26 2011, 12:26) *
Нет к сожалению. Могу посмотреть, но это все нужно делать в универе. А что нужно посмотреть?

Есть ли сигнал Start , Data на RX от мастера и что на XCK

Цитата
...У меня же rx и tx соединены...


Причём здесь они , они на PD1 PD2 , а инит делали для PD4 ( XCK)


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaUrJIu
сообщение Jul 26 2011, 10:05
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 2-04-11
Пользователь №: 64 078



Цитата
Причём здесь они , они на PD1 PD2 , а инит делали для PD4 ( XCK)

Видимо я Вас не понял. На XCK есть лог. 1. Если убрать SBI PORTD,4, то 0.

Сообщение отредактировал MaUrJIu - Jul 26 2011, 10:06
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 26 2011, 10:13
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Смотрите сигналы- расскажите


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaUrJIu
сообщение Jul 28 2011, 16:43
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 2-04-11
Пользователь №: 64 078



Посмотрел, но там ничего не было. Только сейчас кажется понял почему. Эта микросхема (adns-2610 или мышь) при подаче питания посылает два пакета данных и ждет команды от хоста. При этом на линиях clock (наверное только на ps/2, это я понял судя по напряжению на этой ноге - у ps/2=5v у usb=2,6v. Обратил внимание на это только дома, поэтому на осциле не посмотрел) и data лог. 1. Так вот кажется я что-то нашел, но вот что понять не могу.
Код всей программы:

Код
/*
* AVRAssembler2.asm
*    Title        Connect the mouse to the computer via com port     
*  Created    xxx
*  Author        xxx
*    email        xxx
*/

.include "m8def.inc"

;***** Pin definitions

.equ    Rx    =2;Receive pin is PC2
.equ    Tx    =3;Transmit pin is PC3

;***** Global register variables

.def    bitcnt    =R16;bit counter
.def    temp    =R17;temporary storage register

.def    Txbyte    =R18;Data to be transmitted
.def    RXbyte    =R19;Received data

.cseg
.org 0
    rjmp    reset

;***************************************************************************
;*
;* "USART_Init"
;*
;* This subroutine initializes the hardware UART
;*
;***************************************************************************
USART_Init:    ldi R16,(1<<RXEN)|(1<<TXEN)
            out UCSRB,R16
            ldi R16,(1<<URSEL)|(1<<UMSEL)|(1<<UPM1)|(3<<UCSZ0)|(1<<UCPOL)
            out UCSRC,R16
            cbi DDRD,4
;sbi PORTD,4
            ret

USART_Transmit:    sbis UCSRA,UDRE
            rjmp USART_Transmit
            out UDR,Txbyte
            ret

USART_Receive:    sbis UCSRA,RXC
            rjmp USART_Receive
            in RXbyte,UDR
            ret

;***************************************************************************
;*
;* "putchar"
;*
;* This subroutine transmits the byte stored in the "Txbyte" register
;* The number of stop bits used is set with the sb constant
;*
;* Number of words    :14 including return
;* Number of cycles    :Depens on bit rate
;* Low registers used    :None
;* High registers used    :2 (bitcnt,Txbyte)
;* Pointers used    :None
;*
;***************************************************************************
.equ        sb    =1;Number of stop bits (1, 2, ...)

putchar:    ldi    bitcnt,9+sb;1+8+sb (sb is # of stop bits)
        com    Txbyte;Inverte everything
        sec;Start bit

putchar0:    brcc    putchar1;If carry set
        cbi    PORTC,Tx;    send a '0'
        rjmp    putchar2;else    

putchar1:    sbi    PORTC,Tx;    send a '1'
        nop

putchar2:    rcall UART_delay;One bit delay
        rcall UART_delay

        lsr    Txbyte;Get next bit
        dec    bitcnt;If not all bit sent
        brne    putchar0;   send next
;else
        ret;   return


;***************************************************************************
;*
;* "getchar"
;*
;* This subroutine receives one byte and returns it in the "Rxbyte" register
;*
;* Number of words    :14 including return
;* Number of cycles    :Depens on when data arrives
;* Low registers used    :None
;* High registers used    :2 (bitcnt,Rxbyte)
;* Pointers used    :None
;*
;***************************************************************************

getchar:    ldi     bitcnt,9;8 data bit + 1 stop bit

getchar1:    sbic     PINC,Rx;Wait for start bit
        rjmp     getchar1

        rcall UART_delay;0.5 bit delay

getchar2:    rcall UART_delay;1 bit delay
        rcall UART_delay        

        clc;clear carry
        sbic     PINC,Rx;if RX pin high
        sec;

        dec     bitcnt;If bit is stop bit
        breq     getchar3;   return
;else
        ror     Rxbyte;   shift bit into Rxbyte
        rjmp     getchar2;   go get next

getchar3:    ret


;***************************************************************************
;*
;* "UART_delay"
;*
;* This delay subroutine generates the required delay between the bits when
;* transmitting and receiving bytes. The total execution time is set by the
;* constant "b":
;*
;*    3·b + 7 cycles (including rcall and ret)
;*
;* Number of words    :4 including return
;* Low registers used    :None
;* High registers used    :1 (temp)
;* Pointers used    :None
;*
;***************************************************************************
; Some b values:     (See also table in Appnote documentation)
;
; 1 MHz crystal:
;   9600 bps - b=14
;  19200 bps - b=5
;  28800 bps - b=2
;
; 2 MHz crystal:
;  19200 bps - b=14
;  28800 bps - b=8
;  57600 bps - b=2

; 4 MHz crystal:
;  19200 bps - b=31
;  28800 bps - b=19
;  57600 bps - b=8
; 115200 bps - b=2

.equ    b    =5;19200 bps @ 1 MHz crystal


UART_delay:    ldi    temp,b
UART_delay1:    dec    temp
        brne    UART_delay1

        ret

;***** Program Execution Starts Here

;***** Test program

reset:    sbi        PORTC,Tx;Init port pins
        sbi        DDRC,Tx

        push    Txbyte
        rcall    USART_Init;Init USART

        ldi        Txbyte,12;Clear terminal
        rcall    putchar

        ldi R16,(0<<RXEN)
        out UCSRB,R16

;ldi        Txbyte,0xFF
;rcall    USART_Transmit
        
        ldi R16,(1<<RXEN)
        out UCSRB,R16

forever:    rcall USART_Receive
        mov    Txbyte,Rxbyte
        rcall    putchar;Echo received char
        rjmp    forever

Так вот если вкл. в код (см. после метки reset):

Код
ldi R16,(0<<RXEN)
        out UCSRB,R16

;ldi        Txbyte,0xFF
;rcall    USART_Transmit
        
        ldi R16,(1<<RXEN)
        out UCSRB,R16

То программа начинает принимать данные от мыши, но отправка команд ей не работает. Почему это происходит я понять никак не могу. Может есть мысли по этому поводу? Могу предположить, что мк не опускает clock перед передачей, как это требует мышь... (Я еще не знаю всех тонкостей работы usart-a)

Сообщение отредактировал MaUrJIu - Jul 28 2011, 16:50
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th August 2025 - 00:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.01439 секунд с 7
ELECTRONIX ©2004-2016