Hi, ich wollte am Banana Pi (M1, R1, M2 Berry) mit Debian 8 (jessie) den AD/DA-Konverter PCF8591 anschliessen über I2C. Hab mir so ein fertiges Modul wie im Bild besorgt mit einigen Sensoren drauf (Fotodiode (Licht), Temperatur, sowie ein manuelles Poti): https://www.roboter-bausatz.de/207/pcf8591-ad/da-converter-module Datenblätter etc: https://www.roboter-bausatz.de/media/pdf/e7/25/21/PCF8591_AD-DA.pdf https://www.nxp.com/products/analog/interfaces/ic-bus/ic-dacs-and-adcs/8-bit-a-d-and-d-a-converter:PCF8591?tab=Documentation_Tab Dazu habe ich das Paket i2c-tools installiert, und hab im Web verschiedene Versionen von WiringPi gefunden. Irgendwie scheint der den Banana Pi aber nicht direkt zu unterstützen. Das ist noch nicht fertig bei mir. Ich hab diesbezüglich noch einige Links und auch Code aus dem Web. Die muss ich noch aussortieren und werde sie hier auch noch posten. Hat sonst jemand schon WiringPi (bzw. das obige Modul) am Banana Pi bereits zum Laufen gebracht und könnte ein Paar Tips geben?
:
Verschoben durch User
Nach einigen Irrungen und Wirrungen bzgl. der richtigen WiringPi-Version bin ich mit der folgenden Version etwas weitergekommen. Ich mache das auf einem Banana Pi R1 welches wie der M1 den Allwinner A20 SoC benutzt, daher nehme ich unten "bananapi": # git clone https://github.com/LeMaker/WiringBP -b bananapi Cloning into 'WiringBP'... remote: Enumerating objects: 270, done. remote: Total 270 (delta 0), reused 0 (delta 0), pack-reused 270 Receiving objects: 100% (270/270), 223.78 KiB | 0 bytes/s, done. Resolving deltas: 100% (146/146), done. Checking connectivity... done. # cd WiringBP/ # chmod +x build # ./build ... All Done. NOTE: This is wiringBPi v1, and if you need to use the lcd, Piface, Gertboard, MaxDetext, etc. routines then you must change your compile scripts to add -lwiringPiDev # gpio readall +----------+-Rev3-+------+--------+------+-------+ | wiringPi | GPIO | Phys | Name | Mode | Value | +----------+------+------+--------+------+-------+ | 0 | 17 | 11 | GPIO 0 | IN | Low | | 1 | 18 | 12 | GPIO 1 | IN | Low | | 2 | 27 | 13 | GPIO 2 | IN | Low | | 3 | 22 | 15 | GPIO 3 | IN | Low | | 4 | 23 | 16 | GPIO 4 | IN | Low | | 5 | 24 | 18 | GPIO 5 | IN | Low | | 6 | 25 | 22 | GPIO 6 | IN | Low | | 7 | 4 | 7 | GPIO 7 | IN | Low | | 8 | 2 | 3 | SDA | ALT5 | High | | 9 | 3 | 5 | SCL | ALT5 | High | | 10 | 8 | 24 | CE0 | ALT5 | Low | | 11 | 7 | 26 | CE1 | ALT5 | Low | | 12 | 10 | 19 | MOSI | ALT5 | Low | | 13 | 9 | 21 | MISO | ALT5 | Low | | 14 | 11 | 23 | SCLK | ALT5 | Low | | 15 | 14 | 8 | TxD | ALT0 | Low | | 16 | 15 | 10 | RxD | ALT0 | Low | | 17 | 28 | 3 | GPIO 8 | IN | Low | | 18 | 29 | 4 | GPIO 9 | ALT4 | Low | | 19 | 30 | 5 | GPIO10 | OUT | Low | | 20 | 31 | 6 | GPIO11 | ALT4 | Low | +----------+------+------+--------+------+-------+ # i2cdetect -l i2c-1 i2c mv64xxx_i2c adapter I2C adapter i2c-0 i2c mv64xxx_i2c adapter I2C adapter # i2cdetect -y 0 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- UU -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- # i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- Noch verstehe ich die Zusammenhänge noch nicht ganz, aber kommt noch... :-) Wo hängt nun das ADC/DAC-Modul dran? Ich glaube es müsste das mit -y 1 sein (= I2CBUS 1), also Adresse 0x48 ...
:
Bearbeitet durch User
PostalDude schrieb: > Das letzte Mal wo ich mit dem PCF8591 zu tun hatte, stand die > Adresse noch im Datenblatt. Hmm. meinst du die I2C-Adresse (A2 A1 A0) mit Wert 0 bis 7 ? Das sind die 3 Jumper bei diesem Modul, s. Bild. Die andere Adresse ("48"), die ich auf anderen WebSeiten gelesen habe, kommt im Datenblatt mMn überhaupt nicht vor.
:
Bearbeitet durch User
>Die andere Adresse ("48"), die ich auf anderen WebSeiten gelesen habe, >kommt im Datenblatt mMn überhaupt nicht vor. Datenblatt Seite 13. Und die "48" ist hex.
Hab den folgenden Code im Web gefunden, aber das mit der Pin-Base (hier PCF) habe ich nicht kapiert. Wo hat der denn die 120 her? Auf was müsste ich das bei mir ändern? Denn so steigt er beim Aufruf des pcf8591Setup(...) aus und bringt die Fehlermedlung "Unable to open I2C device: No such file or directory"
1 | #include <stdio.h> |
2 | #include <wiringPi.h> |
3 | #include <pcf8591.h> |
4 | |
5 | #define PCF 120 |
6 | |
7 | int main (void) |
8 | { |
9 | int value ; |
10 | wiringPiSetup () ; |
11 | // Setup pcf8591 on base pin 120, and address 0x48 |
12 | pcf8591Setup (PCF, 0x48) ; |
13 | while(1) // loop forever |
14 | { |
15 | value = analogRead (PCF + 0) ; |
16 | printf("%d\n", value); |
17 | analogWrite (PCF + 0, value) ; |
18 | delay (10) ; |
19 | } |
20 | return 0 ; |
21 | } |
:
Bearbeitet durch User
holger schrieb: >>Die andere Adresse ("48"), die ich auf anderen WebSeiten gelesen habe, >>kommt im Datenblatt mMn überhaupt nicht vor. > > Datenblatt Seite 13. Und die "48" ist hex. Ja auf Seite 13 taucht das Wort "ADDRESS" auf, damit sind wohl die A0 bis A2 gemeint, also ein Wert von 0 bis 7 (also die Adresse des Moduls). Aber in dem Datenblatt taucht doch kein 48 auf. Oder habe ich da was übersehen? Aber was hat es mit den viel grösseren Zahlen 120 und 0x48 auf sich? Die sind ja ausserhalb von 0 bis 7. Irgendwas passt da noch nicht ganz... :-)
:
Bearbeitet durch User
Moin, Mutluit M. schrieb: > Aber was hat es mit den viel grösseren Zahlen 120 und 0x48 auf sich? > Die sind ja ausserhalb von 0 bis 7. > Irgendwas passt da noch nicht ganz... :-) Guck! in! die! i2c-bus-Spec! Gruss WK
Also, meine Recherchen haben ergeben, dass die bekannten GPIO-Libs und I2C-Libs nur für die orignalen Raspberry Pi Modelle entwickelt sind. Die RasPi's benutzen einen speziellen DMA-Baustein von Broadcom der in den Libraries verwendet wird. Die Banana Pi's haben diesen Baustein gar nicht (oder haben einen anderen), folglich kann man die Libs nicht 1:1 übernehmen. Jetzt wo das klar ist, brauche ich mich nicht mehr wundern warum es nicht klappt, und kann dann gezielter recherchieren...
:
Bearbeitet durch User
Moin, Mutluit M. schrieb: > Die > RasPi's benutzen einen speziellen DMA-Baustein von Broadcom der in den > Libraries verwendet wird. Die Banana Pi's haben diesen Baustein gar > nicht (oder haben einen anderen), folglich kann man die Libs nicht 1:1 > übernehmen. Axso - Ja, da gehts dir wohl wie dem Bauern, der wegen der falschen Badehose nicht schwimmen kann; da kann man dann wohl nix machen... SCNR, WK
Dergute W. schrieb: > Moin, > > Mutluit M. schrieb: >> Die >> RasPi's benutzen einen speziellen DMA-Baustein von Broadcom der in den >> Libraries verwendet wird. Die Banana Pi's haben diesen Baustein gar >> nicht (oder haben einen anderen), folglich kann man die Libs nicht 1:1 >> übernehmen. > > Axso - Ja, da gehts dir wohl wie dem Bauern, der wegen der falschen > Badehose nicht schwimmen kann; da kann man dann wohl nix machen... Keine Sorge, das wird schon laufen, braucht nur bischen mehr Recherche. Danke für deinen geistreichen Beitrag :-)
@Mutluit M, im Prinzip müsstest Du doch die Infos zu der GPIO HW aus dem device-tree des Kernels zum Deinen BPi-M1/R1/M2 SBC herauslessen können (Adr./Status-Register/etc.) Markus Nachtrag: Oder aus ls -lR /sys/firmware/devicetree/base und cat auf die Files, die Dich interessieren. Nachtrag #2: Beim mir z.B. BPi-R2 liefert das u.g. Kommando dtc --in-format dtb --out-format dts mt7623n-bananapi-bpi-r2.dtb --out mt7623n-bananapi-bpi-r2.dts das angehängte DTS als String File im Anhang. Bei mir steht folgenden zum I2C drin: i2c@11007000 { compatible = "mediatek,mt7623-i2c\0mediatek,mt6577-i2c"; reg = <0x00 0x11007000 0x00 0x70 0x00 0x11000200 0x00 0x80>; interrupts = <0x00 0x2c 0x08>; clock-div = <0x10>; clocks = <0x1a 0x19 0x1a 0x0d>; clock-names = "main\0dma"; #address-cells = <0x01>; #size-cells = <0x00>; status = "okay"; pinctrl-names = "default"; pinctrl-0 = <0x1f>; }; i2c@11008000 { compatible = "mediatek,mt7623-i2c\0mediatek,mt6577-i2c"; reg = <0x00 0x11008000 0x00 0x70 0x00 0x11000280 0x00 0x80>; interrupts = <0x00 0x2d 0x08>; clock-div = <0x10>; clocks = <0x1a 0x1a 0x1a 0x0d>; clock-names = "main\0dma"; #address-cells = <0x01>; #size-cells = <0x00>; status = "okay"; pinctrl-names = "default"; pinctrl-0 = <0x20>; }; i2c@11009000 { compatible = "mediatek,mt7623-i2c\0mediatek,mt6577-i2c"; reg = <0x00 0x11009000 0x00 0x70 0x00 0x11000300 0x00 0x80>; interrupts = <0x00 0x2e 0x08>; clock-div = <0x10>; clocks = <0x1a 0x1b 0x1a 0x0d>; clock-names = "main\0dma"; #address-cells = <0x01>; #size-cells = <0x00>; status = "disabled"; };
:
Bearbeitet durch User
Jetzt klappt's endlich! Lösung liegt darin, diese Libraries wie wiringPi oder pigpio überhaupt nicht zu benutzen, und stattdessen das ureigene Linux-Interface zu benutzen. Und das bedeutet praktisch nur basic File-I/O mit open(), ioctl(), write(), read() und close(). So einfach! :-) Man lese in dem Zusammenhang auch diesen Kommentar eines weisen Posters https://raspberrypi.stackexchange.com/questions/41316/i2c-using-wiringpi-or-ioctl-in-c-more-than-2-bytes "... I would strongly encourage you to not use wiringPi or any other pi specific library for this, and instead use the linux kernel interface. For some reason, there is a trend with the pi to intentionally write non-portable code, which is the opposite of what would normally be considered best practice. It is easy to say now, "Well I am only ever going to be using this on a raspberry pi anyway," but if at some point you get another board/device/whatever with I2C pins running linux (there are many such things), code using the kernel dev API will work without modification. Code written using wiringPi will not. Generally there is no purpose to using such libraries for I2C. I would guess the reason it is there at all, at least in the wiringPi case, is because the library was intended to mimic an Arduino library, making it familiar for novice programmers coming from there. Judging by your examination of the source in the question, it is built on ioctl(), meaning it is just using the kernel interface anyway! " Ich werde in Kürze meine Lösung posten, muss zuvor den Code etwas "nice" machen :-)
@Markus W., vielen Dank. Die Lösung ist sehr einfach; diese Raspi-spezifischen Libraries haben es nur verkompliziert, also verschlimmbessert. Ich werde alles zusammenfassen und in Kürze hier posten.
:
Bearbeitet durch User
Hier also meine Lösung:
1 | /* |
2 | pcf8591_AD_DA_on_any_Pi_device.c |
3 | |
4 | Programming the ADC/DAC chip PCF8591 (and modules/hats that use such a chip) |
5 | for reading data from its analog input channels |
6 | as well sending data to its analog output channel. |
7 | For details see PCF8591 Data Sheet ( https://www.nxp.com/docs/en/data-sheet/PCF8591.pdf ). |
8 | |
9 | This implementation does use just basic C programming, |
10 | and does not need any of the popular RaspberryPi-specific libraries |
11 | like WiringPi or pigpio. Ie. this is a portable implementation. |
12 | |
13 | Written 2019-05-29-We by um@mutluit.com |
14 | |
15 | |
16 | Prerequisites: |
17 | Install package i2c-tools from the Linux repository |
18 | |
19 | |
20 | list the i2c devices |
21 | # ls -l /dev/i2c* |
22 | crw-rw---- 1 root i2c 89, 0 Jan 1 1970 /dev/i2c-0 |
23 | crw-rw---- 1 root i2c 89, 1 Jan 1 1970 /dev/i2c-1 |
24 | |
25 | |
26 | get the address (in hex) of i2c device 1, ie. /dev/i2c-1 |
27 | # i2cdetect -y 1 |
28 | 0 1 2 3 4 5 6 7 8 9 a b c d e f |
29 | 00: -- -- -- -- -- -- -- -- -- -- -- -- -- |
30 | 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
31 | 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
32 | 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
33 | 40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- -- |
34 | 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
35 | 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
36 | 70: -- -- -- -- -- -- -- -- |
37 | |
38 | |
39 | Compile: |
40 | # gcc -O2 -Wall -Wextra -std=gnu11 -o pcf8591_AD_DA_on_any_Pi_device.exe pcf8591_AD_DA_on_any_Pi_device.c |
41 | |
42 | |
43 | Run as root (or use sudo): |
44 | # ./pcf8591_AD_DA_on_any_Pi_device.exe |
45 | |
46 | |
47 | NOTES: |
48 | In this example below, only the analog input channel 0 is read. You can change it below. |
49 | See also the data sheet of the PCF8591 and also the documentation of your specific module. |
50 | |
51 | I used the following module: https://www.roboter-bausatz.de/207/pcf8591-ad/da-converter-module |
52 | That module has some additional sensors (light, temperature and a manual potentiometer) |
53 | for easy testing of the ADC/DAC chip. |
54 | You can find it (and similar modules) at many places on the net, also in ebay. |
55 | |
56 | I developed and tested this code on Banana Pi devices (M1, R1): http://www.banana-pi.org/r1.html#others |
57 | The module was attached to the 3.3V pin, TWI2-SDA, TWI2-SCK, and GND pin. |
58 | |
59 | It continously just reads 1 byte and displays it. For further usage one would convert/scale that value |
60 | to a meaningful range depending on the context, ie. temperature, voltage, daylight etc. |
61 | |
62 | */ |
63 | |
64 | #include <stdio.h> |
65 | #include <string.h> |
66 | #include <fcntl.h> |
67 | #include <linux/i2c-dev.h> |
68 | #include <sys/ioctl.h> |
69 | #include <unistd.h> |
70 | #include <errno.h> |
71 | #include <stdint.h> |
72 | |
73 | |
74 | // see comments above |
75 | #define MY_I2C_ADDR 0x48 |
76 | |
77 | |
78 | // see PCF8591 Data Sheet, page 6, Control Byte; link above |
79 | struct pcf8591_control_byte |
80 | { |
81 | uint8_t Channel : 2, // 0..3 |
82 | ChannelAutoInc : 1, // see data sheet |
83 | Reserved1 : 1, // value 0 |
84 | ChannelMixing : 2, // see data sheet |
85 | Enable_AOUT : 1, // enabling AOUT, ie. DAC functionality |
86 | Reserved2 : 1; // value 0 |
87 | }; |
88 | |
89 | |
90 | int main(void) |
91 | { |
92 | int fd = open("/dev/i2c-1", O_RDWR); // see comments above |
93 | if (fd < 0) |
94 | { |
95 | printf("Error opening device: %s\n", strerror(errno)); |
96 | return 1; |
97 | } |
98 | if (ioctl(fd, I2C_SLAVE, MY_I2C_ADDR) < 0) |
99 | { |
100 | printf("ioctl error: %s\n", strerror(errno)); |
101 | close(fd); |
102 | return 1; |
103 | } |
104 | |
105 | // write 0x0: ie. use just channel 0, see data sheet |
106 | struct pcf8591_control_byte S; |
107 | memset(&S, 0, sizeof(S)); |
108 | /* |
109 | S.Channel = 0; |
110 | S.ChannelAutoInc = 0; |
111 | ChannelMixing = 0; |
112 | Enable_AOUT = 0; |
113 | */ |
114 | if (write(fd, &S, 1) != 1) |
115 | printf("ERR #1: %s\n", strerror(errno)); |
116 | |
117 | // read continously 1000 values with 50ms delay between each reading: |
118 | for (int i = 0; i < 1000; ++i) |
119 | { |
120 | uint8_t u; |
121 | const ssize_t n = read(fd, &u, 1); |
122 | if (!n) |
123 | printf("ERR\n"); |
124 | else |
125 | printf("%d\n", u); |
126 | |
127 | usleep(50 * 1000); // 50ms delay |
128 | } |
129 | |
130 | close(fd); |
131 | return 0; |
132 | } |
Moin, Geht doch! Lag wohl doch weder an der Badehose, noch am Broadcom-DMA-Baustein. ;-) Gruss WK
Mutluit M. schrieb: > # i2cdetect -y 0 > 0 1 2 3 4 5 6 7 8 9 a b c d e f > 30: -- -- -- -- UU -- -- -- -- -- -- -- -- -- -- -- Das ist der PMIC (AXP209) - der hat auch 'n ADC eingebaut :)
Dergute W. schrieb: > Moin, > > Geht doch! Lag wohl doch weder an der Badehose, noch am > Broadcom-DMA-Baustein. ;-) Du sagst es! :-) cu
Uwe R. schrieb: > Mutluit M. schrieb: >> # i2cdetect -y 0 >> 0 1 2 3 4 5 6 7 8 9 a b c d e f >> 30: -- -- -- -- UU -- -- -- -- -- -- -- -- -- -- -- > > Das ist der PMIC (AXP209) - der hat auch 'n ADC eingebaut :) Ja, kann man den denn frei benutzen? Oder ist der intern schon vergeben bzw. wird benutzt? Das UU müsste doch bedeuten dass es bereits in Benutzung ist, nicht wahr? Nachtrag: $ man i2cdetect : · "UU". Probing was skipped, because this address is currently in use by a driver. This strongly suggests that there is a chip at this address.
:
Bearbeitet durch User
Mutluit M. schrieb: >> Das ist der PMIC (AXP209) - der hat auch 'n ADC eingebaut :) > > Ja, kann man den denn frei benutzen? Oder ist der intern schon vergeben > bzw. wird benutzt? Ne, du kannst nur die Spannungen und die Chiptemperatur auslesen.. > Nachtrag: > $ man i2cdetect : > · "UU". Probing was skipped, because this address is currently in > use by a driver. This strongly suggests that there is a chip at this > address. Für den gibts es wohl mittlerweile ein *.ko lsmod|grep axp20x find sys -name '*axp*'
Jetzt frage ich mich natürlich, wie man die On-Board-Sensoren auf diesem Modul disablen kann, damit man an die 4 Analog-Eingänge AIN0, AIN1, AIN2, AIN3 des PCF8591 eigene Sensoren bzw. Analogquellen anschliessen kann. Muss mal das Data Sheet des Moduls selbst auffinden... Vlt. habe ich es schon downgeloadet von irgendwoher auf dem Web.. Such such... :-) Nachtrag: also, es heisst die Jumper auf dem Modul sind genau dafür vorgesen (ich hatte bis jetzt angenommen, diese wären dafür da um jedem Modul seine eigene Sub-Adresse im Bereich 0..7 zu vergeben; lag damit wohl falsch). Hier ein Auszug aus einem Review dieses Moduls mit der Bezeichnung "PCF8591 YL-40 AD/DA Module": https://brainfyre.wordpress.com/2012/10/25/pcf8591-yl-40-ad-da-module-review/ " The jumpers control whether analog input channels of the IC are connected to the analog sources: Jumper P4 for AIN1: The temperature sensed by the R6 thermister is provided to the ADC. Jumper P5 to AIN0: The R7 photocell voltage (resistance drop) is provided to the DAC. Jumper P6 to AIN3: The single turn 10K ohm trimpot voltage (resistance drop – brighter light, lower resistance). "
:
Bearbeitet durch User
Achtung! Entgegen der Werbeaussagen mancher Anbieter, die behaupten man könne bis zu 8 solcher Module an den selben I2C-Bus anschliessen, kann man von diesem Modul tatsächlich wohl nur 1 Stück anschliessen. Die andere Variante gibt es auch (nennt sich "Mini PCF8591 AD DA Shell Module", kostet aber ca. 3x mehr: https://arduinodiy.wordpress.com/2016/10/17/adding-a-pcf-8591-adcdac-to-esp8266-01/
:
Bearbeitet durch User
HI >Achtung! Entgegen der Werbeaussagen mancher Anbieter, die behaupten man >könne bis zu 8 solcher Module an den selben I2C-Bus anschliessen, kann >man von diesem Modul tatsächlich wohl nur 1 Stück anschliessen. Blödsinn. Du hast drei frei auswählbare Adresspins. das reicht für acht Adressen. Also acht PCF8591 anschließbar. MfG Spess
Mutluit M. schrieb: > Achtung! Entgegen der Werbeaussagen spess53 schrieb: > Blödsinn. Du hast drei frei auswählbare Adresspins eben, ich bin nicht mal sicher ob der TO nicht nur ein Troll ist, erst will er den super hyper USBSATAFIREBUS kreieren, dann eröffnet er immer so merkwürdige Threads und irgendwann kommt ein neuer Thread....... Wenn es schon am Datenblatt lesen und verstehen scheitert?..... Beitrag "SATA FullSpeed" Beitrag "Marke Eigenbau: SoC-Imitat" Beitrag "Re: DAC-Verstärker" Beitrag "Tip: SATA-Kabel"
Hi >eben, ich bin nicht mal sicher ob der TO nicht nur ein Troll ist, erst >will er den super hyper USBSATAFIREBUS kreieren, dann eröffnet er immer >so merkwürdige Threads und irgendwann kommt ein neuer Thread....... Ich habe alle Beiträge von ihm gelesen. Diesen Troll-Verdacht habe ich schon seit einiger Zeit. Aber vielleicht ist er nur ein kleiner Spinner. MfG Spess
spess53 schrieb: > >>Achtung! Entgegen der Werbeaussagen mancher Anbieter, die behaupten man >>könne bis zu 8 solcher Module an den selben I2C-Bus anschliessen, kann >>man von diesem Modul tatsächlich wohl nur 1 Stück anschliessen. > > Blödsinn. Du hast drei frei auswählbare Adresspins. das reicht für acht > Adressen. Also acht PCF8591 anschließbar. Es geht um das hier benutzte Modul namens "PCF8591 YL-40 AD/DA Module", also nicht um den PCF8591 selbst. Denn, in dem Modul ist die Addresse festverdrahtet (verlötet), eben die bekannte I2C-Adresse 0x48. Zitat aus https://arduinodiy.wordpress.com/2016/10/17/adding-a-pcf-8591-adcdac-to-esp8266-01/
1 | "The module is hardwired to 0x48 as the three address lines are soldered to ground. So if you would want to use more than one module on the same I2C port you would need to do some de-soldering (or use bare PCF8591 chips ofcourse). [..] |
2 | There is a (more expensive) fully configurable module (Mini PCF8591 AD DA Shell Module), that allows to set the I2C address with jumpers. That module is daisy chainable with other I2C modules in the same range (there is for example a PCF8547 digital I/O module with similar connections). [..]" |
Also, um mehr als eins solch baugleicher Module anzuschliessen, muss man etwas rumlöten (Lötstellen aufbrechen und so neu verdrahten usw.)
:
Bearbeitet durch User
Joachim B. schrieb: > Mutluit M. schrieb: >> Achtung! Entgegen der Werbeaussagen > > spess53 schrieb: >> Blödsinn. Du hast drei frei auswählbare Adresspins > > eben, ich bin nicht mal sicher ob der TO nicht nur ein Troll ist, erst > will er den super hyper USBSATAFIREBUS kreieren, dann eröffnet er immer > so merkwürdige Threads und irgendwann kommt ein neuer Thread....... > > Wenn es schon am Datenblatt lesen und verstehen scheitert?..... > > Beitrag "SATA FullSpeed" > Beitrag "Marke Eigenbau: SoC-Imitat" > Beitrag "Re: DAC-Verstärker" > Beitrag "Tip: SATA-Kabel" Du nervst mit deinem ständigen Off-Topic-Müll. Geh wo anders spielen wenn du schon keinen sachbezogenen Beitrag zu leisten im Stande bist.
Joachim B. schrieb: > spess53 schrieb: >> kleiner > > das kleiner nimmst du zurück Du bist Off-Topic.
Mutluit M. schrieb: > muss man > etwas rumlöten und wo ist das Problem? Mutluit M. schrieb: > Lötstellen aufbrechen wer tut denn sowas, ich kenne nur einen der "aufbricht" Heinz Erhardt "auf lasset uns brechen und machen auf den Weg"
spess53 schrieb: > Hi > >>eben, ich bin nicht mal sicher ob der TO nicht nur ein Troll ist, erst >>will er den super hyper USBSATAFIREBUS kreieren, dann eröffnet er immer >>so merkwürdige Threads und irgendwann kommt ein neuer Thread....... > > Ich habe alle Beiträge von ihm gelesen. Diesen Troll-Verdacht habe ich > schon seit einiger Zeit. Aber vielleicht ist er nur ein kleiner Spinner. Den Spinner nimmst du zurück und verpisst dich aus meinem Thread!
Hallo @Moderator, kannst du mal was gegen die paar Idioten was unternehmen die hier den Thread vergiften mit ihren Off-Topic-Müll ?
Joachim B. schrieb: > Mutluit M. schrieb: >> muss man >> etwas rumlöten > > und wo ist das Problem? > > Mutluit M. schrieb: >> Lötstellen aufbrechen > > wer tut denn sowas, ich kenne nur einen der "aufbricht" > > Heinz Erhardt "auf lasset uns brechen und machen auf den Weg" Ja, ja, behalt solchen irrelevanten Schmarrn lieber für dich, hier jedenfalls ist es Off-Topic.
Hab erst eben entdeckt, dass dieses Modul auch eine grüne LED hat die mit AOUT verbunden ist (d.h. wenn man DAC macht). Je nach Ausgabewert variiert die Intensität dieser LED. Sichtbar wird es erst so ab einem Wert von ca. 160+. Sieht cool aus :-)
:
Bearbeitet durch User
Hab jetzt eine simple ncurses Text-GUI dafür gebastelt. Sieht so aus:
1 | PCF8591 YL-40 AD/DA Module - Press + or - to change AOUT, any other key to quit. |
2 | |
3 | AIN0 (photocell: brightness) 122 ****************************** |
4 | AIN1 (thermistor: temperature) 254 *************************************************************** |
5 | AIN2 (?) 255 *************************************************************** |
6 | AIN3 (trim poti: resistor) 211 **************************************************** |
7 | AOUT (aout: LED: intensity) 170 ****************************************** |
Code poste ich in Kürze. Nachtrag: die Zuordnungen sind evtl. noch nicht richtig gesetzt, denn Temperatur sollte eigentlich nicht so einen hohen Wert haben... :-) Evtl. mit AIN0 vertauscht. Muss noch überprüfen...
:
Bearbeitet durch User
Also, wie ich oben auch schon angemerkt hatte, scheint mit dem Temperatur-Sensor allgemein etwas nicht in Ordnung zu sein, wie auch der folgende Tester schreibt: https://arduinodiy.wordpress.com/2016/10/17/adding-a-pcf-8591-adcdac-to-esp8266-01/
1 | "In my version of the board the NTC channel only varied between 255 and 254, changing the temperature didnt seem to have any influence, but removing jumper P4 made the value go all over the place so i presume the channel is ok, and only the NTC might not be OK." |
(Mit NTC meint er den Temperatur-Sensor, aka thermistor) Vielleicht aber fehlt noch etwas spezielles an der Programmierung, denn ich kann mir kaum vorstellen, dass so ein HW-Fehler über die ca. 10+ Jahre die es dieses Modul am Markt schon gibt, nicht bemerkt und gefixt worden wäre.
:
Bearbeitet durch User
Beitrag #5859565 wurde vom Autor gelöscht.
@ Mutluit M. wozu sind eigentlich die drei Jumper auf der Platine? https://www.roboter-bausatz.de/media/image/c3/90/6c/PCF8591-1_600x600.jpg Ich dachte die sind für die Einstellung der I2C Adresse ab einem Fixen vorgegebenen Wert (z.B. 0x48) mit der Möglichkeit diesen um ein Delta von 0-7 zu verändern. Markus
spess53 schrieb: > Du hast drei frei auswählbare Adresspins. das reicht für acht > Adressen. Also acht PCF8591 anschließbar. Mutluit M. schrieb: > Denn, in dem Modul ist die Addresse festverdrahtet (verlötet) Markus W. schrieb: > Ich dachte die sind für die Einstellung der I2C Adresse ab einem Fixen > vorgegebenen Wert (z.B. 0x48) mit der Möglichkeit diesen um ein Delta > von 0-7 zu verändern. das dachte ich auch, aber es ist ein leichtes die drei Jumper nacheinander zu ziehen und den I2C scan durchzuführen, man könnte ja auch per DMM die Jumperleitungen zu den Adresspins "durchklingeln" Aber auf die Idee muss man erst mal kommen :) Nach der Moderation zu rufen mit geklauten Bildern ist aber auch nicht besonders schlau!
:
Bearbeitet durch User
Markus W. schrieb: > > wozu sind eigentlich die drei Jumper auf der Platine? > > https://www.roboter-bausatz.de/media/image/c3/90/6c/PCF8591-1_600x600.jpg > > Ich dachte die sind für die Einstellung der I2C Adresse ab einem Fixen > vorgegebenen Wert (z.B. 0x48) mit der Möglichkeit diesen um ein Delta > von 0-7 zu verändern. Das dachte ich die ganze Zeit auch, es trifft aber nicht zu; denn die sind zum Anklemmen/Abklemmen der 3 On-Board-Sensoren. Hatte bereits was dazu geschrieben, mit Verweis: Beitrag "Re: ADC- und DAC-Experimente mit PCF8591 auf Banana Pi SBCs (WiringPi, i2c-tools)"
@Mutluit M. Wenn Du an den Onboard Sensoren nicht so interessiert bist, kannst Du sie ja ablöten und die Jumper für die I2C Adress- Auswahl umfunktionieren. Bei einem Modul-Preis von 2€ kann man den Verlust verschmerzen, falls was kaputt gehen sollte. Von so billigen Dingern ordere ich mir meist fünf bis zehn, da man da oft rumpfriemeln muss bis es einigermaßen funktioniert. Markus
Diese Module (PCF8591 YL-40) haben sogar 2 LEDs drauf (gekennzeichnet als D1 und D2), aber bei mir funktioniert nur D1 (AOUT). D2 soll leuchten wenn das Modul Strom hat (leuchtet bei mir nicht, ob das vlt. nur bei 5V geht und nicht 3.3V?). Noch ein kleines Problem: ich hab 2 äusserlich identische von diesen Modulen (beide aus der selben Bestellung). Bei einem leuchtet D1 grün, bei dem anderen rot, und wie oben schon gesagt, leuchtet bei keinem die LED D2. Hier ist der Schaltplan des Moduls, vlt. hat jemand eine Idee woran es liegen könnte dass D2 nicht leuchtet: https://brainfyre.wordpress.com/2012/10/25/pcf8591-yl-40-ad-da-module-review/ Na, wie diese Dinger die QC passiert haben muss man sich schon fragen... :-)
@Mutluit M. Da die Dinger so billig sind, besteht die Möglichkeit das sie die QC, falls vorhanden, nicht bestanden haben und nun auf einem Billigweg verramscht werden. Check mal mit einem DMM ob die LED richtig herum eingelötet ist, falls nicht, dann umlöten, oder beide LED,s gegeneinander tauschen ;-) Markus
Joachim B. schrieb: > spess53 schrieb: >> Du hast drei frei auswählbare Adresspins. das reicht für acht >> Adressen. Also acht PCF8591 anschließbar. > > Mutluit M. schrieb: >> Denn, in dem Modul ist die Addresse festverdrahtet (verlötet) > > Markus W. schrieb: >> Ich dachte die sind für die Einstellung der I2C Adresse ab einem Fixen >> vorgegebenen Wert (z.B. 0x48) mit der Möglichkeit diesen um ein Delta >> von 0-7 zu verändern. > > das dachte ich auch, aber es ist ein leichtes die drei Jumper > nacheinander zu ziehen und den I2C scan durchzuführen, man könnte ja > auch per DMM die Jumperleitungen zu den Adresspins "durchklingeln" > > Aber auf die Idee muss man erst mal kommen :) Ach du Genie, hier friss: i2cdetect zeigt immer die selbe Adresse 0x48 an, egal ob eine oder mehrere/alle Jumper angesteckt oder abgesteckt sind. Da brauchst du nicht mehr mit DMM hingehen, weil überflüssig! Ja, auf die Idee muss du echt erst mal kommen!... :-) > Nach der Moderation zu rufen mit geklauten Bildern ist aber auch nicht > besonders schlau! Ein Screenshot machen kann man wohl kaum als geklaut nennen. Das ist doch gang und gäbe in den Foren. Es fällt sicherlich unter das sog. "Zitatrecht" https://de.wikipedia.org/wiki/Urheberrecht#Zitatrecht bzw. "Fair use and Fair dealing": https://en.wikipedia.org/wiki/Copyright#Fair_use_and_fair_dealing Wenn der Mod den Screenshot beanstandet hätte, dann hätte er schon darauf aufmerksam gemacht.
Markus W. schrieb: > > Da die Dinger so billig sind, besteht die Möglichkeit > das sie die QC, falls vorhanden, nicht bestanden haben > und nun auf einem Billigweg verramscht werden. Das Gefühl habe ich auch :-) > Check mal mit einem DMM ob die LED richtig herum eingelötet > ist, falls nicht, dann umlöten, oder beide LED,s gegeneinander > tauschen ;-) Das sind mikrig-kleine LEDs. Da lohnt sich der Aufwand nicht und mein Kolben ist auch nicht so fein für so eine Arbeit. Da kann man nix mehr machen, muss es halt so akzeptieren, stört ja im Grunde nicht, hat halt nur eine andere Farbe. Egal. Man kann damit leben. Ich würde dieses Modell sowieso nicht mehr kaufen, sondern das Modell wo man per Jumper die Adresse einstellen kann und dadurch bis zu 8 Module ans I2C-Bus ranhängen kann. Nachtrag: Ich hatte letztens auch folgenden 16-Kanal-Multiplexer gesehen (3 Stk für €5.37); aber ist wohl nur ein Umschalter so dass nur ein Kanal aktiv ausgewählt sein kann, aber dennoch interessant: https://www.ebay.de/itm/3pcs-16CH-Analog-Digital-Multiplexer-Breakout-Precise-Module-CD74HC4067-TE669/133046277016 D.h. damit kann man pro ADC-Kanal aus 16 weiteren Kanälen dahinter auswählen. Betriebsspannung ist zwar 2 bis 6V, aber ob die Signale mehr als 3.3V sein müssen geht aus der Beschreibung nicht klar hervor (4.5V taucht da auf); muss man sich wohl das Datenblatt des ICs besorgen.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.