Dữ liệu cổng nối tiếp 9 bit có đúng không?


10

Tôi có một dự án máy bán hàng tự động, hoàn thành một nửa, đang chạy trên một UTC Atmel, mà tôi muốn chuyển sang Pi.

Để nói chuyện với các thiết bị ngoại vi, chẳng hạn như chấp nhận tiền xu, nó phải hỗ trợ Multi-Drop Bus có giao diện cổng nối tiếp bit 9 dữ liệu (cộng với các bit bắt đầu, dừng và chẵn lẻ).

Tôi đã học được một cách khó khăn với bảng Atmel, những thứ mà người ta tìm thấy được gợi ý trên mạng, dựa vào việc sử dụng bit chẵn lẻ vì bit dữ liệu thứ 9 có thể gây ra vấn đề về thời gian xấu - khó phát hiện và sửa lỗi (vì vậy, vui lòng không giới thiệu tôi với điều này , hoặc tương tự. Cảm ơn).

Có ai biết nếu tôi có thể mua một cổng nối tiếp 9 bit thực sự cho Pi không (điểm thưởng nếu bằng cách nào đó nó có thể hoạt động với số 0).

Có, có lẽ, một chiếc mũ có sẵn? Hoặc tôi có thể dễ dàng (tôi có / anh chàng, với ít kiến ​​thức về h / w) sử dụng một bảng khác để xử lý 9 bit dữ liệu UART và điều khiển từ Pi không?


1
Có một giao diện nối tiếp trên GPIO - trên các hình ảnh Raspbian, v.v. nó đã được thiết lập để cung cấp đầu ra từ Pi để bạn phải vô hiệu hóa nó trước, nhưng bạn vẫn sẽ gặp vấn đề với các bit không nằm trong phạm vi tiêu chuẩn. Bài đăng này trên các diễn đàn cũng có thể giúp đỡ.
Wilf

1
Bạn có thể thêm phần cứng cho dự án? Một tấm khiên có UART sẽ không quá khó để tạo ra một trong số đó, và sẽ cung cấp cho bạn chính xác những gì bạn cần, mặc dù nó có thể sử dụng nhiều I / O hơn giá trị của nó. Một CPU PIC thực sự cấp thấp có thể nhanh chóng được lập trình để dịch từ serial 8 đến 9 bit mà không tốn quá nhiều chi phí hoặc là một lượng công việc quá mức cho bạn.
Michael Kohne

Bạn có biết nơi tôi có thể mua một cái không?
Mawg nói rằng phục hồi Monica

Câu trả lời:


7

Thư viện pigpio của tôi hỗ trợ đọc và ghi dữ liệu nối tiếp 9 bit. Nó sử dụng bit banging để bạn có thể sử dụng bất kỳ GPIO có sẵn nào.

Nếu tôi nhớ chính xác thì mọi tốc độ 19,2 kbps hoặc chậm hơn đều khá ổn định.

Bạn cần bit nào mỗi giây?

Đọc ( C , Python ) dễ hơn một chút so với viết ( C , Python ).


1
Bạn có chắc chắn 100 * không? Khi tôi mới bắt đầu phát triển, tôi đã được cảnh báo về những "hack" như vậy và nói rằng sẽ có vấn đề về thời gian. Bạn có biết nếu có ai thử nó với một máy bán hàng tự động? vi.wikipedia.org/wiki/Multidrop_buscoin-acceptor.com.cn/Upload/EditorFiles/technicalfile/ trộm (xin lỗi, tôi không thể đưa ra một số sectoin vì tôi đứng sau tường lửa của công ty)
Mawg nói phục hồi Monica

3
Trải nghiệm duy nhất tôi có là sử dụng thư viện giữa Pi và máy tính xách tay có khóa nối tiếp USB. Các thử nghiệm tôi đã làm được ghi lại trong raspberrypi.stackexchange.com/questions/27488/ . Phần mềm của tôi chỉ sử dụng RX / TX và tiếp đất, vì vậy nếu bạn làm điều gì đó lạ mắt với các tín hiệu nối tiếp khác, bạn có thể gặp vấn đề.
joan

Âm thanh tốt. : Hãy để tôi kiểm tra thông số kỹ thuật và liên lạc lại với bạn
Mawg nói rằng phục hồi Monica

2
@Mawg: bạn đã chấp nhận điều này. Có nghĩa là giải pháp đề xuất làm việc đáng tin cậy?
Thomas Weller

3

Tôi đã được chỉ định một dự án để chạy một máy bán hàng tự động sử dụng giao thức MDB để thanh toán và tôi đã hoàn thành dự án bằng Pi Zero (Orange).

Tôi đã thử các thư viện nối tiếp phần mềm và phần cứng 9 bit và gặp vấn đề về thời gian trên Pi Zero. Giao tiếp nối tiếp 9 bit của MDB đã trở thành một nỗi đau. Giao thức MDB cho biết các thiết bị ngoại vi nên có dung sai% 5 cho thời gian giao tiếp nối tiếp, tuy nhiên các nhà cung cấp ngoại vi khác nhau có dung sai khác nhau, không tuân thủ giao thức MDB. Khi bạn nghĩ rằng bạn đã hoàn thành giao tiếp nối tiếp nhưng thử ngoại vi thanh toán của nhà cung cấp khác, thì nó không hoạt động. Vì vậy, đừng dựa vào bảng dữ liệu giao thức MDB. Tôi phát ốm và mệt mỏi khi triển khai bộ điều khiển MDB cho các nhà cung cấp lỗi. Ngoài ra, một số thiết bị ngoại vi có thể thoát dòng điện quá mức từ các chân uart trong quá trình khởi động bên trong của chúng và có thể làm hỏng lớp giao tiếp nối tiếp của bạn. Vì vậy, tốt hơn bạn nên sử dụng một sự trừu tượng. Bộ ghép nối vẫn ổn nhưng tôi vẫn không Chúng tôi khuyên bạn nên xử lý giao tiếp nối tiếp MDB bằng Pi Zero. Cách tốt hơn là sử dụng cách tiếp cận lớp giữa bằng cách sử dụng một AVR.

Thay vì sử dụng Uart trên Pi Zero để liên lạc MDB, tôi đã sử dụng Atmega328 AVR để xử lý MDB, bỏ phiếu, v.v. Atmega328 điều khiển các thiết bị ngoại vi MDB bằng thư viện Phần mềm nối tiếp và gửi dữ liệu có thể đọc được của con người đến Pi Zero trên phần cứng nối tiếp. Tất cả các sơ đồ điện tử, nguồn và hình ảnh Pi Zero Armbian, mã Python cho các hoạt động bán hàng tự động đều có sẵn tại đây:

http://eliverse.com/content/vendiverse/

Bạn có thể kiểm tra trang wiki để biết thêm chi tiết về điều khiển động cơ, cảm biến phân phối sản phẩm, bộ làm mát và màn hình LCD ký tự. Đây là một dự án điều khiển máy bán hàng tự động hoàn chỉnh và nó đang được sử dụng bởi một vài nhà sản xuất máy bán hàng tự động.


Đây là một câu trả lời tuyệt vời, đặc biệt vì nó là một câu trả lời đầu tiên. Trước đây tôi đã thành công với một bảng mạch Atmel với UART 9 bit thực sự và đã hy vọng tiết kiệm tiền bằng cách sử dụng Raspberry Pi, nhưng giải pháp của bạn rất toàn diện đến nỗi tôi sẽ không dại gì sử dụng nó. Than ôi, tôi là một người chỉ có phần mềm, vì vậy đối với một nguyên mẫu, tôi rất thích một giải pháp không cần hàn. Bạn có thể giới thiệu một bảng COTS?
Mawg nói rằng phục hồi Monica

Trang này trên trang web của bạn có nội dung "Nếu bạn đã hoàn thành các bước trong Tạo bảng VMC đa dạng hoặc nếu bạn đã nhận được bảng VMC đa dạng". Tôi có thể mua một cái từ bạn không? Nó sẽ có chi phí bao nhiêu? Ngoài ra, nếu bạn đề xuất bất kỳ thiết bị ngoại vi MDB cụ thể nào, bạn có thể thêm nó vào trang web của mình không? Cảm ơn
Mawg nói rằng phục hồi Monica

Có vẻ như email của tôi đang bị kẹt trong thư rác của bạn. Bạn có thể liên lạc với tôi? Bạn có địa chỉ email của tôi, và tôi vẫn còn ở Bremen
Mawg nói rằng hãy phục hồi lại

Bây giờ có vẻ như trang này đã chết và dự án đã bị hủy bỏ :-(
Mawg nói rằng phục hồi Monica


1

Tất cả dữ liệu nối tiếp là theo định nghĩa, 1 bit. Tùy thuộc vào giao diện đọc ghi dữ liệu đó làm thế nào để đồng ý về cách họ diễn giải các bit đến và từ dữ liệu có ý nghĩa.
Nếu bạn muốn 9 bit dữ liệu, và một bit chẵn lẻ, dừng và bit bắt đầu. Sau đó, tùy thuộc vào bạn để chuyển đổi dữ liệu của bạn sang định dạng đó và để giải thích dữ liệu bạn đọc theo định dạng đó. Mô-đun pigpio được đề cập trong câu trả lời khác sẽ cung cấp cho bạn phần cứng giao thoa bạn cần hoặc bạn có thể tự viết. Nếu bạn đang phát triển bằng python, tôi khuyên bạn nên xem mô-đun bitString.py của Scott Griffiths như một thư viện giúp thao tác dữ liệu dựa trên bit khá dễ dàng.


5
Vấn đề với việc truyền dữ liệu nối tiếp là trong thời gian. Dữ liệu không tự đồng hồ và chuyển đổi mức được bảo đảm duy nhất là trong các bit stop / start. Cả hai đầu phải duy trì thời gian chặt chẽ, không bị gián đoạn để tìm ra vị trí của các bit. Đó là lý do tại sao phần cứng chuyên dụng thường được sử dụng để truyền và nhận dữ liệu. Có rất ít thời gian chậm trễ.
joan

1

Tôi chắc chắn thích UART phần cứng hơn triển khai phần mềm như pigpio.

Bạn có thể sử dụng bit chẵn lẻ để giao tiếp 9 bit. Có một vấn đề nhỏ: nhân hiện tại không có hỗ trợ CMSPAR (không gian / dấu ngang).
Nhưng bạn có thể chuyển chẵn lẻ / chẵn lẻ để có giá trị bit thứ 9 mong muốn ngay cả với kernel hiện tại, ví dụ:

unsigned char check_parity(unsigned char v)
{
    v ^= v >> 4;
    v &= 0xf;
    return (0x6996 >> ((v ^ (v >> 4)) & 0xf)) & 1;
}

/* send 9 bits - 8 bits of byte + 1 bit of parity */
send_byte_with_parity(unsigned char byte, unsigned char parity)
{
    if (check_parity(byte) == parity) {
        options.c_cflag &= ~PARODD;
    } else {
        options.c_cflag |= PARODD;
    }
    tcsetattr(fd, 0, &options);
    write(fd, &byte, 1);
}


Cách tiếp cận tốt hơn IMHO là sử dụng bản vá nhân nhỏ để hỗ trợ CMSPAR:
http://marc.info/?l=linux-serial&m=145706834101241&w=2
Nó bổ sung hỗ trợ đánh dấu chẵn lẻ / dấu cách, cho phép mã đơn giản hơn một chút.

PS Tôi đã triển khai MDB qua serial với phương pháp này. Nó hoạt động trên Pi hoàn hảo.
PPS Patch đã được phê duyệt và CMSPAR sẽ hoạt động tốt bắt đầu với 4.6 kernel.


Không có bản vá hoặc ít nhất là một liên kết, và chi tiết đầy đủ hơn, đây không phải là một câu trả lời, thậm chí nó cũng không phải là một nhận xét hữu ích - ngoài việc nó nói về mặt lý thuyết là có thể.
Steve Robillard

Nó vẫn để lại nhiều câu hỏi hơn câu trả lời: Làm cách nào để triển khai MDB, làm cách nào để áp dụng bản vá kernel, điều này sẽ hoạt động trên tất cả các Pi hay chỉ một số trong số chúng? Điều gì khác có thể phá vỡ này? Làm thế nào tôi có thể hoàn tác điều này nếu cần thiết? Bản vá này có an toàn không? Hãy nhớ rằng bạn biết điều này bởi vì bạn đã thực hiện nó OP không có.
Steve Robillard

1
Tôi đã xóa bỏ câu trả lời của bạn, vì bạn thừa nhận câu trả lời của bạn có thể tốt hơn. Tôi hy vọng bạn sẽ tận dụng cơ hội để cải thiện nó.
Steve Robillard

Tôi cần thêm gì nữa không? Thực hiện MDB? Tôi đã không được phép mở nguồn từ chủ lao động của mình.
edo1

Xem bình luận trước của tôi và nhớ rằng người dùng cuối không biết tất cả những gì bạn làm.
Steve Robillard

1

Bạn không thể ĐÁNG TIN CẬY kết nối nối tiếp RPi trực tiếp với bus MDB do định dạng 9 bit và định thời MDB nghiêm ngặt. Các thông báo giữa MDB ngoại vi và RPi cần được chuyển đổi nhanh chóng và theo thời gian thực. Kiểm tra liên kết này nó sẽ giúp: bộ chuyển đổi MDB-UART DIY


0

Câu trả lời được chấp nhận, sử dụng bộ xử lý Atmel với URT dữ liệu 9 bit thực sự giao tiếp với Pi trông có vẻ đã bị bỏ rơi hoặc được đưa vào giao dịch.

Vì vậy, tôi sẽ sử dụng https://www.veinatingtools.ro/en cho Eur 70 và điều đó sẽ giao diện Pi của tôi với bus bit dữ liệu MDB 9.


[Cập nhật]

Xem thêm

https://www.qibixx.com/en/products/mdb-interface/

https://blog.abrantix.com/webshop/product/mdb-to-raspberry-pi/

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.