Ja, R32 und R33 mit jeweils 4,7kOhm. Vom RP6 war allerdings bisher noch nicht die Rede, oder?
Achso. Aber sda und sdc haben doch schon am rp6 einen pullup, oder nicht?
Ja, R32 und R33 mit jeweils 4,7kOhm. Vom RP6 war allerdings bisher noch nicht die Rede, oder?
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
aber wenn man doch sda(asuro) und sda(rp6) verbindet, ist doch sda vom asuro auch mit an V+, oder?
Aber nur über den PullUp. Bei deiner Anwendung ist das eh egal, weil beide Kontroller von der selben Spannungsquelle versorgt werden.
Hintergrund: Wenn keine Daten übertragen werden, sind alle Teilnehmer auf Eingang geschaltet. Die Signalleitungen würden dann einen undefinierten Pegel besitzen. Deshalb zieht man die Leitungen mit den PullUps auf Vcc oder auf high. Beim Start der Übertragung zieht der sendende Teilnehmer die Leitung gegen den PullUp aktiv auf low (opencollektor) und dies wird von den anderen Teilnehmern als Start einer Übertragung erkannt.
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
hm...
Code:
Compiler meckert:Code:#include <avr/io.h> #include "i2cmaster.h" #include "twi_register.h" const char Zahl[] = { 0b01000100, 0b01111101, 0b10100100, 0b00110100, 0b00011101, 0b00010110, 0b00000110, 0b01111100, 0b00000100, 0b00010100 }; void twi_send( unsigned char befehl ) { i2c_start(0b01000110+I2C_WRITE); i2c_write(befehl); i2c_stop(); } int main(void) { i2c_init(); while(1) { twi_send(0b1111101); } return 0; }
Code:test.o: In function `twi_send': test.c:20: undefined reference to `i2c_start' test.c:21: undefined reference to `i2c_write' test.c:22: undefined reference to `i2c_stop' test.o: In function `main': test.c:28: undefined reference to `i2c_init' make: *** [test.elf] Error 1 Kompilierung fehlgeschlagen.
undefined reference to .... wird geschrieben wenn er nicht weiß was er machen soll. Das ist z.B. wenn die Headerdatei nicht oder falsch eingebunden ist. Entweder wurde diese umbenannt, ist an einem anderen Ort als angegeben, nicht vorhanden, ...
MfG Hannes
Okay, klappt Super Danke!
Geändert von AsuroPhilip (22.10.2011 um 16:57 Uhr) Grund: Lösung gefunden!
So weit so gut.... der mega8 kann die anzeige perfekt steuern, hier code:
So, aber wie kann die M32 dem mega8 jetzt sagen, was er zeigen soll?Code:#include <avr/io.h> #include "i2cmaster.h" #include <util/delay.h> #define pcf 0b01000110 // Anzeige #define pcf2 0b01000010 // Segmente void long_delay(uint16_t ms){ for(; ms>0; ms--) _delay_ms(1); } const char Zahl[] = { 0b01000100, 0b01111101, 0b10100100, 0b00110100, 0b00011101, 0b00010110, 0b00000110, 0b01111100, 0b00000100, 0b00010100 }; void twi_send( unsigned char befehl ){ i2c_start(pcf+I2C_WRITE); i2c_write(befehl); i2c_stop(); } void twi_send2( unsigned char befehl1 ){ i2c_start(pcf2+I2C_WRITE); i2c_write(befehl1); i2c_stop(); } void ZeigeZahl(uint16_t Zahl4){ char a_zahl1[5]; snprintf(a_zahl1, sizeof(a_zahl1), "%d", Zahl4); twi_send(0b1111110); twi_send2(Zahl[a_zahl1[0] - '0']); long_delay(8); twi_send2(0b11111111); twi_send(0b1111101); twi_send2(Zahl[a_zahl1[1] - '0']); long_delay(8); twi_send2(0b11111111); twi_send(0b1111011); twi_send2(Zahl[a_zahl1[2] - '0']); long_delay(8); twi_send2(0b11111111); twi_send(0b1110111); twi_send2(Zahl[a_zahl1[3] - '0']); long_delay(8); twi_send2(0b11111111); } int main(void) { i2c_init(); while(1) { ZeigeZahl(1234); } return 0; }
edit:
habe die plantine verkleinert, damit ich sie unter der normalen exp. verstecken kann.
hier noch ein (handy-) Foto: (habe meine richte cam gerade nicht hier)
Geändert von AsuroPhilip (22.10.2011 um 18:22 Uhr) Grund: Foto
Der Master speichert die Segmentmuster der Ziffern und schickt sie endlos an den Anzeigeslave? So war das doch nicht gedacht, oder? Der Master schickt einmalig die Ziffernfolge und der Slave steuert endlos die entsprechenden Segmente an.
Das Bild ist leider sehr unscharf, ich kann den Sockel für den Mega8 gar nicht erkennen. Was macht der Taster?
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Ich sagte ja Handycam. Sockel hatte ich keinen mehr . Der Taster ist Reset. Die drei Stiftleisten sind zum programmiern. Rechts kommen noch Servostecker.
der Code oben ist vom mega8. also ich hab mir das so vorgestellt:
M32 sendet einmalig die Zahl(z.B. 1234) an den mega8, der speichert dann 1234 in eine Variable und führt dann immer das aus: ZeigeZahl(Variable); und sobald eine neue Zahl kommt wieder von vorn.
Lesezeichen