2016-07-13 9 views
0

Я новичок здесь и отчаянно ищу решение для моей проблемы. В настоящее время я пытаюсь заставить мою малину Pi общаться с AD-7705 16-бит-АЦП с Python. К сожалению, хотя, дела идут не так, как ожидалось ... схема выглядит следующим образом: AD7705 CircuitAD7705 - Проблемы с настройкой и связью с Raspberry Pi через bitbanged SPI в Python

Я сделал много исследований и тщательно изучил таблицу, чтобы выбрать части, чтобы удовлетворить все требования AD7705 в. Все припаивается к разделочной доске.
Чтобы моя PCB была как можно более простой, я не могу использовать аппаратный SPI, поэтому я обязан бить. Поскольку CS привязан к GND, связь сокращается до MOSI, MISO и CLK. Я полагаю, что я ошибся в реализации SPI для AD7705. Я работал с MPC3008 перед использованием bitbanged SPI и заработал его должным образом, поэтому я полагаю, что у меня огромная логическая ошибка в моей реализации для AD7705.

На данный момент, моя процедура выглядит следующим образом:

send 0010 0000 -> request write access to clock register 
send 0000 0100 -> configure clock register for 2.4576MHz operation 
send 0001 0000 -> request write access to setup register 
send 0100 0010 -> set gain = 1, buffered mode and perform self-calibration 
send 0000 1000 -> request read access to communiation register 
read 1 byte 

Это очень похоже на «Flowchart для Настройка и чтение из AD7705» из таблицы, с небольшими различиями в письменных данных в регистр часов (я использую резонатор с другой частотой).

Проблема в том, что я получаю только случайные и не воспроизводимые байты. И я даже не пытаюсь читать фактические данные. Вы можете заметить какую-либо ошибку?

Я попытался предоставить всю информацию о моем методе, хотя я не могу объяснить все техническое описание. Однако проблема не должна быть аппаратно-сторонней.

def send(sendcmd): 
    for i in range(8): 
     GPIO.output(CLK, 0) 
     time.sleep(0.0001) 
     if (sendcmd & 0x80): 
      GPIO.output(MOSI, 1) 
     else: 
      GPIO.output(MOSI, 0) 
     GPIO.output(CLK, 1) 
     time.sleep(0.0001) 
     sendcmd <<= 1 

def read(): 
    readbyte=0 
    for i in range(8): 
     GPIO.output(CLK, 0) 
     time.sleep(0.0001) 
     GPIO.output(CLK, 1) 
     time.sleep(0.0001) 
     readbit = GPIO.input(MISO) 
     readbyte |= readbit 
     readbyte <<= 1 
    return readbyte >> 1 

ответ

0

Я позаимствовал цифровой осциллограф (большие инструменты!) От друга, и выяснил, что сигнал CLK переключал слишком быстро, поэтому я увеличил время ожидания между CLK HI/LO переключается на 0.001s.
Впоследствии, я узнал, что я не получил никакого правильного сигнала от булавки DOUT от ADC, даже если мои байты отправлены правильно, поэтому я заменил чип.

Теперь все работает так, как ожидалось, поэтому мой совет для всех: помните, чтобы щедро относиться к критериям времени при битрейдинге SPI! =)

0

«отправить 0000 0100 -> Настройка синхронизации регистра для работы 2.4576MHz» а отправить 0000 1100 (перешеек на 2 бита) с 4.9152MHz

+0

Что вы имеете в виду «а отправить» – ElectroBit

+0

Рат · эр наречие использовано для обозначения предпочтений в конкретном вопросе. Скорее отправьте b00001100, чем «заменить чип» –

 Смежные вопросы

  • Нет связанных вопросов^_^