подключение 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
Потом еще понадобится работать с данными, но это после- пока что их принять- проблема.
|
|
| |
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) старшие. Как мне еще старшие прикрутить?
|
|
| |