-
Thread
ADC- und DAC-Experimente mit PCF8591 auf Banana Pi SBCs (WiringPi, i2c-tools)
if (write(fd, &S, 1) != 1) printf("ERR #1: %s\n", strerror(errno)); // read continously 1000 values with 50ms delay between each reading: for (int i = 0; i < 1000; ++i) { uint8_t u; const ssize_t n = read(fd, &u, 1); if (!n) printf("ERR\n"); else printf("%d\n", u); usleep(50 * 1000); // 50ms delay } close(fd); return 0; } [/code]
-
Thread
RAM-Bits im FPGA effektiv nutzen
speichern kann, um einen Sacnner für schnelle Daten zu haben. Gespeichert werden Prozessorzugriffe mit ADR+DAT+STROBES = 44 Bits. Der Prozessor arbeitet mit 156.25 MHz. Wieviele Zugriffe kann ich speichern (angenommen der FPGA ist schnell genug, wovon ich ausgehe)? Aus dem Artix Family Sheet ersehe
Graphikkarten mit HBM(=schneller gehts nicht): Radeon VII: Schnittstelle: 4.096 Bit Taktrate: 1000 MHz (DDR) Bandbreite: 1,0 Terabyte/s Latenz ------- Artix 7 200: Schnittstelle: 25920 Bit Taktrate: 509Mhz (höchster Speedgrade) Bandbreite: 1,6 Terabyte/s Und da sprechend wir noch nichtmal
-
Thread
Linux Kernel 5.1.1. auf dem BPi-R2
e320f000 e51fd028 (e58de000) Resetting CPU ... resetting ... Diesmal ist der PC: vor der Load-Adr. ??? Markus
-6.00 sec 119 MBytes 1000 Mbits/sec [ 6] 6.00-7.00 sec 119 MBytes 1000 Mbits/sec [ 4] 6.00-7.00 sec 119 MBytes 1.00 Gbits/sec 0 639 KBytes [ 6] 7.00-8.00
-
Thread
Avr 8bit VGA
40x25 Zeichen darstellt und jedes Zeichen durch ein Byte darstellbar ist, brauchst du dafür 40 * 25 = 1000 Byte RAM als Puffer für die Textseite. Dazu kommt nochmal wenn ein Zeichen 8 Pixel breit und 16 Pixel hoch ist ein Char-ROM von maximal 256 Zeichen * 8 Pixel/Zeile * 16 Zeilen/Zeichen / 8 Pixel/Byte
Doch, die gibt es noch, werden aber zumeist über einen 8/16 Adr.-/Datenbus angesteuert. Beispiel: S1D13705 und Nachfolger. Dann gibt es auch fertige Controller wie FT800/810 mit integrierten Zeichensätzen - ich mag sie nicht. Alternativ eine andere Lösung mit
-
Thread
LSM6DSL Gyro+Accelerometer, Gyro gibt keine Werte aus.
, LSM6DSL_Adr, GYRO_X_REG_L, 1, &Recieve_Buffer[0], 2, I2C_Timeout); Gyro_X = Recieve_Buffer[0] | (Recieve_Buffer[1] << 8); HAL_I2C_Mem_Read(&hi2c1, LSM6DSL_Adr, GYRO_Y_REG_L, 1, &Recieve_Buffer[0], 2, I2C_Timeout
, LSM6DSL_Adr, &Send_Buffer[0], 2, I2C_Timeout); HAL_Delay(50); HAL_I2C_Mem_Read(&hi2c1, LSM6DSL_Adr, GYRO_X_REG_L, 1, &Recieve_Buffer[0], 2, I2C_Timeout); Gyro_X = Recieve_Buffer[0] | (Recieve_Buffer
-
Thread
ESP32 als ISP
: "); Serial.print(Adr_MSB); Serial.print(" Adr_LSB: "); Serial.print(Adr_LSB); spi_transaction(0x40, Adr_MSB, Adr_LSB , DatenBytes[1 + multi_1 * 2]); //LowByte spi_transaction(0x4C, Adr_MSB, Adr_LSB, 0x00); //Datum schreiben delay(5); spi_transaction(0x48, Adr_MSB, Adr_LSB, DatenBytes[0 + multi_2 * 2]); //HigbyteByte spi_transaction(0x4C, Adr_MSB, Adr_LSB
-
Thread
Modbus RS485 RTU - China Relais Board
auf der Rückseite steht R421A08 Das Teil ist mit Funktion 6 wie folgt schaltbar: 01 Modbus Adr. 06 Write single Register 00 01 Relais Nr. 01 00 Relais "EIN" bzw. 02 00 Relais aus XX XX CRC Der EIN Befehl ist z.B. 01 06 00 01 01 00 D8 FA Läuft mit 9600,8,N,1
addons/bindings/modbus1/ meine modbus.cfg: serial.slave1.connection=/dev/ttyUSB0:9600:8:none:1:rtu:1000 serial.slave1.type=holding serial.slave1.id=1 serial.slave1.start=0 serial.slave1.length=16 serial.slave1.valuetype=uint16 item: Switch MBRelay1 "My Modbus Switch 1" {modbus="<[slave1:0], >
-
Thread
Die SSD1306 mag den MSP430 nicht (antwortet nicht).
0x40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,00,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,00,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; unsigned char txAdr = 0x3C; int main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; // Stop WDT _EINT(); __delay_cycles(1000000); // 1 Sekunde warten
cntChars = 0; while(1) { I2cSend(0x3C, buchstabeA, 7); cntChars++; if(cntChars>1000) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT _EINT(); cntChars = 0; __delay_cycles(100000); I2cSend(0x3C, goto00, 5); I2cSend(0x3C
-
Thread
Variablen eindeutig benennen damit der Typ eindeutig ist
genauer: das #define) taucht als Anzahl in > dem Array aus Strukturen auf, das er anlegt. wofür c_RcvAdr, wenn es nur offsetof RcvAdr ist? In den meisten fällen schreibt man doch eh X.RcvAdr. Und wenn man den Index braucht ... doppelt gemoppelt failed schneller.
A. S. schrieb im Beitrag #5686588: > A. S. schrieb: >> wofür c_RcvAdr, wenn es nur offsetof RcvAdr ist? In den meisten fällen >> schreibt man doch eh X.RcvAdr. Und wenn man den Index braucht ... >> doppelt gemoppelt failed schneller. > > Deshalb fragte ich fairer
-
Thread
suche eine Spannungsreferenz wie TL431.
Such Dir einen aus: ATL431 ZR431 AN431 KA431 ADR431 TS431 LM431
CR2450 rein. Ich messe mal den Innenwiderstand der Batterie ... Ich habe den Ladekondensator auf 1000µF erhöht damit die Spannung nicht unter -12V abfällt. Nachschrift: Der Innenwiderstand beträgt 8,2 Ohm. die schalte ich mal in Reihe zu den -3V und schaue wie das Modul dann arbeitet. LG
-
Thread
Wärmebildkamera mit dem MLX90640 und Arduino Due
zaehlerzuruecksetzen) { i2c_eeprom_updateUIntArray(I2C_EEPROM_ADRESSE, EEPROM_SPEICHER_ADR, Zaehler, sizeof(Zaehler) / sizeof(Zaehler[0])); // Zaehler zuruecksetzen } else { i2c_eeprom_readUIntArray(I2C_EEPROM_ADRESSE, EEPROM_SPEICHER_ADR, Zaehler, sizeof(Zaehler
); } i2c_eeprom_updateUIntArray(I2C_EEPROM_ADRESSE, EEPROM_SPEICHER_ADR, Zaehler, sizeof(Zaehler) / sizeof(Zaehler[0])); i2c_eeprom_readUIntArray(I2C_EEPROM_ADRESSE, EEPROM_SPEICHER_ADR, Zaehler, sizeof(Zaehler) / sizeof(Zaehler[0])); Serial.println
-
Thread
EleLa - Elektronik Lagerverwaltung V3.1
connected. 22:37:00 ===================== 22:37:00 Start check integrity 22:37:00 CheckIntegrity: adr.ID <> bauteiladr.adr_ID 22:37:00 CheckIntegrity: adr.ID <> bauteillager.adr_ID 22:37:00 CheckIntegrity: adr.ID <> bestellen.Lief1_adr_ID 22:37:00 CheckIntegrity: adr.ID <> bestellen.Lief2_adr_ID 22:37:00 CheckIntegrity: adr.ID <> projekt.adr_ID 22:37:00 CheckIntegrity: adr.ID <> projekteinzel.adr_ID 22:37:00 CheckIntegrity: adr.ID <> historie.adr_ID 22:37:00 CheckIntegrity: adr.ID <> kosten.adr_ID 22:37:00 CheckIntegrity
-
Thread
+-1000V DC Quelle
im Beitrag #5650705: > Keithley 237 oder Fluke 332/335/5440B? Der 5440B kann doch nur 25mA bei 1000V.
Wenn es von bester Qualität sein darf, dann empfehle ich ein Gerät von Kikusui. Das PAT1000-8T liefert 1000V bei 8A. Allerdings ist es nicht ganz billig: Um die 25k Euro solltest Du dafür schon einplanen :)
-
Thread
EEPROM 24C256 und Standby Mode
. Write Operations). Punkt 2 interpretiere ich so: [code] int SetStandby(unsigned char txAdr, unsigned char byteCount, unsigned char *field) { TI_USCI_I2C_transmitinit(txAdr, 0x0c); // init I2C/USCI (transmit) TI_transmit_field = field; byteCtr = byteCount; UCB0CTL1 |= UCTR
see 7. Write > Operations). > > Punkt 2 interpretiere ich so: > int SetStandby(unsigned char txAdr, unsigned char byteCount, unsigned > char *field) > { > > TI_USCI_I2C_transmitinit(txAdr, 0x0c); // init I2C/USCI (transmit) > TI_transmit_field = field; > byteCtr = byteCount; > UCB0CTL1
-
Thread
Funktion nur ausführen in Interupt
TW_ST_DATA_ACK: // 0xB8 Slave Transmitter, weitere Daten wurden angefordert if (buffer_adr == 0xFF) // zuvor keine Leseadresse angegeben! { buffer_adr=0; } TWDR = txbuffer[buffer_adr]; // Datenbyte senden buffer_adr++;
TW_ST_DATA_ACK: // 0xB8 Slave Transmitter, weitere Daten wurden angefordert if (buffer_adr == 0xFF) // zuvor keine Leseadresse angegeben! { buffer_adr=0; } TWDR = txbuffer[buffer_adr]; // Datenbyte senden buffer_adr++;
-
Thread
Defekte Platine Teufel CB11 Bauteilerkennung
erwähnt habt ist die Messung des ESR ein guter Schritt. Viele defekte Elkos (aber nur Werte < ca. 1000uF) konnte ich mit dem Komponententester eines älteren HAMGE Oszilloskops diagnostizieren: Hier liegt nämlich dann die erwartete Ellipse nicht symmetrisch zur Y-Achse sondern „schräg drin“. Weil eben
gesucht, siehe Anhang Da steht "Date Code" (könnte auch Device-Markingcode + Datecode ect sein) "E7ADR" und "E7ADG" Also im Link von Sven ist ein "G5725adjt11u" mit Marking "E7AD6" und im Anhang haben wir "E7ADR" und "E7ADG". Wenn man bei Global Mixed-mode Technology allgemein in Dablas das Marking
-
Thread
uC für 0,20€ CH552 / CH554 von WCH Billig Micro mit USB Funktion, Chip vorstellung
times, please notice this. in einem Russischen Forum hat einer ein dauer test gemacht und mehr als 1000 mal beschrieben ohne Probleme.
putc(unsigned char c) { SBUF=c; TI=0; while(!TI){}; } void main(void) { long int adr=0; SP=0xfe; EA=0; SCON = 0x40; T2CON =0x34; T2MOD=0xc0; RCAP2=0xFD8F; TI = 1; for(adr=0;adr<0xFFFE;adr++) { putc(*prog); prog++; } while(1); } [/
-
Thread
Probleme beim Debuggen mit SW4STM32 und und F7Disco
Gut aber dagegen könnte man den RegPt ja PWM_Wert_Pt nennen und die Adresse noch als PWM_Wert_Reg_adr oder so definieren. Aber das ist dann vermutlich dass gleiche wie mit der Hal nur in grün.
Gut aber dagegen könnte man den RegPt ja PWM_Wert_Pt nennen und die > Adresse noch als PWM_Wert_Reg_adr oder so definieren. Aber das ist dann > vermutlich dass gleiche wie mit der Hal nur in grün. Auch keine gute Idee! Man nutzt die Bezeichnungen, die auch im Datenblatt stehen.
-
Thread
Flipdot Display Projekt (Hilfe Logik Erbeten)
> #include "Adafruit_MCP23017.h" Adafruit_MCP23017 mcp; // PINOUT MCP23017 to Display //int adr0 = 0; //int adr1 = 1; //int adr2 = 2; //int udnNumber = 3; Positiv Power to be set //int ulnrow = 4; //int ulncolum = 5; //int cycleLED = 6; //int enable =7; //int spalteA = 8; //int spalteB
Code ging IC 8 und 9 parallel DANKE Nochmal das PINOUT // PINOUT MCP23017 to Display //int adr0 = 0; //int adr1 = 1; //int adr2 = 2; //int udnNumber = 3; IC2 Enable Positiv Power to be set //int ulnrow = 4; IC9 Enable //int ulncolum = 5; IC8 Enable //int cycleLED = 6; TEST Kanal //int
-
Thread
Probleme mit LED blinken lassen, Frequenz ändert sich nicht
SET_LED_ON; // Testweise, aber auch flackert die LED //SET_LED_TOGGLE; _delay_ms(1000); // egal welchen Wert ich nehme 200,500,1000 Das Flackern ändert sich nicht } } [/code] compiliert und geladen wird es mit (Zum test sogar ohne Makefile): [code] avr-gcc -mmcu=atmega1284p
typedef void ( *bootloader_stub ) ( void ); bootloader_stub bootloader = (bootloader_stub)(BOOTLOADER_ADR / 2); // Need to be in WORD Address [/code] Und so kann ich einfach mit "bootloader();" in den Bootloader springen. Den Watchdog benutze ich aktuell nur, wenn ich den ATmega gezielt Reseten möchte
-
Thread
stm32f103-bluepill-peripherie
(uint32_t adresse) { uint32_t data; asm ( "adr r1, adresse " // Lade in r1 den Zeiger auf adresse "ldr r2, [r1] " // lade in r2 die adresse "adr r1, data " // Lade in r1 den Zeiger auf data "ldr r3, [r2] " //
_t read_reg (uint32_t adresse) { > uint32_t data; > asm > ( > "adr r1, adresse " // Lade in r1 den Zeiger auf adresse > "ldr r2, [r1] " // lade in r2 die adresse > "adr r1, data " // Lade in r1 den Zeiger auf data > "ldr r3, [r2] "
-
Thread
Umbenennung von Registerbezeichnungen
braucht sich nicht mehr darum zu kümmern, etwa so: [c] .def CmndReg = r2 ; Hi_komand .def AdrRegHi = r3 ; Lo_komand / High_address .def AdrRegLo = r4 ; Lo_address ; *************************************************** .def temp = r16 ; .def MacReg = r17
passiert. Daraus folgt bei mir ein besseres Verständnis, was überhaupt los ist. Klar kann ich auch 1000 Zeilen per Copy/Paste oder #include in meinen Code einfügen, aber dann weiß ich trotzdem nicht, wie er funktioniert. >> logische Fehler u.ä. fallen mir meist schon da auf > > Wie Du logische Fehler
-
Thread
Zähler im EEPROM
dann den die Werte geschickt miteinander verrechnen. Das Ganze geht natürlich auch mit 100 oder 1000 EEPROM-Bytes als "linearen Zähler". Und/oder in das EEPROM nur alle paar Sekunden /und/ bei Powerfail den Zählerstand schreiben. Dann musst du nur erkenne, dass die Spannung abfällt und ausreichend
Fpga K. schrieb im Beitrag #5461927: > paar us Schreiben Da liegst du um den Faktor 1000 daneben, das bewegt sich im paar ms Bereich. @Lothar Safari schrieb im Beitrag #5461554: > Hast du beim Zugriff auf das EEPROM abgeschaltet, oder wenn das grade > Pause hatte?
-
Thread
GPSDO Fragen
das ja bedeuten, dass man die Anzahl Perioden während einer Sekunde mit einer Auflösung von ca. 1/1000 messen könnte (was gegenüber jetzt eine Verbesserung um Faktor 1000 wäre ;-)). Was mir nicht klar ist, ob der TDC das wirklich kann. Was passiert, wenn am START-Eingang mehrere Start-Pulse kommen
kleiner die Abweichung, umso länger muss dann die Messdauer sein. Für 10^-10 dann z.B. mindestens 1000 Sekunden oder 1000x den PPS Impuls vom GPS.
-
Thread
Powermessung mit INA219
Power messen und Anzeigen lassen. Die Spannung messe ich so: [c] // Spannungsmessung i2c_start(adr_ina219); // Angabe Adresse i2c_write(0x02); // Register Spannung i2c_stop(); i2c_start(adr_ina219 +1); // Auslesen Adresse + 1 msb_spannung = i2c_readAck
Schema zu verlaufen. Das lohnt sich eine eigene Funktion, z.B.: [c] uint16_t ina219_read( uint8_t adr_ina219, uint8_t reg) { uint16_t value; i2c_start(adr_ina219); // Angabe Adresse i2c_write(reg); i2c_stop(); i2c_start(adr_ina219 +1); // Auslesen Adresse + 1