[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
подключение 2-м slave
ashallДата: Четверг, 01.11.2012, 12:39 | Сообщение # 1
Группа: Пользователи
Сообщений: 4

Статус: Offline
Доброго времени суток.
Есть задача снять показания, передающиеся между AT89C52 и драйвером дисплея D7225 (вложил PDF). На выходе драйвера стоит 7-сегментный дисплей, вход C/D подтянут на землю самой 89c52 постоянно, не меняяется. В соответствии с кардиограммами (пейдж41) пробую считать, код ниже, но не знаю как завязать еще /BUSY.

$regfile = "m8def.dat"
$crystal = 8000000
$baud = 38400

$hwstack = 40
$swstack = 20
$framesize = 40

Config Spi = Hard , Interrupt = On , Data Order = Msb , Master = No , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 1

Spiinit Dim B As Byte , Rbit As Byte , Bsend As Byte
Dim A As Bit

Enable Interrupts
On Spi Spi_isr Nosave

Dim Mystr[] As String * 20
Mystr[] = "Atmega8 UART ready!"
Dim Rc As String * 20

Print Mystr[]
Spdr = 0
Do

If Rbit = 8 Then
Disable Interrupts
Print "received : " ; Bin(b)
Rbit = 0
Read B
Spdr = B
Enable Interrupts
End If

Loop

Spi_isr:
Incr Rbit
push r24
in r24,sreg
push r24
nop
B = Spdr
pop r24
!out sreg,r24
pop r24
Return
End

Потом еще понадобится работать с данными, но это после- пока что их принять- проблема.
Прикрепления: D7225G.pdf (284.7 Kb)


 
ashallДата: Четверг, 01.11.2012, 12:48 | Сообщение # 2
Группа: Пользователи
Сообщений: 4

Статус: Offline
Кстати, деление RATE пока подобрать не удается правильно- мусорит, я думаю из-за бьюзи, хотя по (41 странице) CL1- внутренний, 29000 Гц (измеряно частотомером, как и все остальное), /CS - 3и6 Гц соответственно, /BUSY 102ГЦ/51ГЦ, /SCK 384и768Гц.
Еще вариант дожидатся спадов и нарастаний, но как программно реализовать- пока незнаю.


 
RD3AVJДата: Пятница, 02.11.2012, 20:16 | Сообщение # 3
Группа: Свой человек
Сообщений: 175

Статус: Offline
Вы пытаетесь задействовать AT89C52? В коде мега8я стоит, у нее на борту штатный SPI интерфейс, его и задействуйте, зачем мучать программные методы? Возьмите мегу и прилепляйте драйвер µPD7225, они нормально должны обмениваться...

 
ashallДата: Пятница, 02.11.2012, 20:55 | Сообщение # 4
Группа: Пользователи
Сообщений: 4

Статус: Offline
Вы не поняли. Устройство промышленное, выводит температуру на драйвер дисплея D7225 (из 89с52), а я вторым слайвом цепляюсь, и забираю именно показания те, что мне нужны, с помощью меги8 на комп. или может я неправильно объяснил.

 
exersizzeДата: Пятница, 02.11.2012, 21:14 | Сообщение # 5
Группа: Администраторы
Сообщений: 723

Статус: Offline
Тоесть хотите перехватывать показания которые контроллер шлет на дисплей? Не проще брать данные не на выходе а на входе, прямо с датчика?

 
ashallДата: Суббота, 03.11.2012, 09:44 | Сообщение # 6
Группа: Пользователи
Сообщений: 4

Статус: Offline
нет, не проще. тот вариант уже отсох.

Вот, что сейчас имею:
Код:
Dim R1(8) As Byte ' обозначил массив

If Rbit = 8 Then 'массив заполнен
Disable Interrupts

Print "received : " ; Hex(r1(1)) ; Hex(r1(2)) ; Hex(r1(3)) ; Hex(r1(4)) ; Hex(r1(5)) ; Hex(r1(6)) ; Hex(r1(7)) ; Hex(r1(8)) 'работаю с массивом

Rbit = 1 'сброс переменных для следующего запонения
Spdr = 0

Enable Interrupts

End If

Spi_isr:
Incr Rbit
push r24
in r24,sreg
push r24
R1(rbit) = Sreg 'записываю в массив

pop r24
!out sreg,r24
pop r24

Return

Судя по расширенному даташиту ATmega8- SPDR передает (r24) младшие значения и (r25) старшие. Как мне еще старшие прикрутить?


 
  • Страница 1 из 1
  • 1
Поиск: