Hallo, nachdem ich an der FH ein Mikrocontroller Praktikum machen musste, und mir das eigentlich ziemlich viel spaß gemacht hat, wollte ich sowas jetzt auch mal zu Hause ausprobieren. Ich hab mir nach dieser Bauanleitung http://batronix.com/elektronik/bauanleitungen/mc-board-2-layouts.shtml ein kleines Experimentierboard gebaut, mit einem AT89C51RC2 Controller, und zusätzlicher rs232 schnittstelle. So, alles aufgebaut, an PC angeschlossen, und ich hatte auch Verbindung mit dem ATMEL Flip Programm. Dann hab ich mal ein kleines Programm mit Bascom geschrieben, und übertragen. Seit dem geht aber gar nix mehr. Der Controller macht nichts, und ich kann auch keine Verbindung mehr zu dem Board aufbauen. Was hab ich falsch gemacht? Ist dieser Controller für Anfänger überhaupt zu empfehlen? Wenn nein, welchen sollte ich dann holen (sollte schon 8051 kompatibel sein, weil da kann ich jetzt halbwegs für assembler programmieren)?
Hab mir die Schaltung mal eben angeschaut... naja,- so richtig gefallen tut die mir nicht. Hab selber erst vor 2 Monaten ein Projekt mit dem RC2 gemacht und die ganze Zeit beim Proggen keinen Ärger gehabt,- auch mit Atmel Flip. Um den Bootloader im RC2 zu aktivieren benutzt flip beim Auto ISP die RTX und CTX Leitungen (Kannst im Flip unter Einstellungen auch nachschauen was für welche funktion ist) jedenfalls geht eine auf den Reset und die andere ich glaub auf Psen bzw zieht PSEN auf ground (*auswendig gesagt,- hab hier meine Datenbläter nicht). Das ist die Hardware Condition, unter der der Atmel in den Bootloader springt und du ihn dann programmieren kannst,- und der tuts sogut wie immer... (Es sei denn, du hast mit dem Parallelbrenner die ISP Eigenschaft abgeschaltet). Deine schaltung schaut so aus,- als ob die mit der Softwarecondition den Bootloader ansprint,- nur dazu mußt ein bestimmtes Flag im Hardwaresecurity Byte brennen. und ich rate mal,- hast du nicht gemacht... lad dir von atmel mal das datenblatt zu den Rx2 Prozessoren runter, da und in den Appnotes ist gut beschrieben, wie das mit flip und dem Bootloader funzt. Viel Erfolg,- greetz Black
Erstmal (wenn auch verspätet) danke für den Tip, jetzt funktioniert das Programmieren einwandfrei. Jetzt hab ich allerdings das nächste Problem. Ich versuche über einen PCF8574 ein paar LED's zu steuern, mit dem angehängten Code. Klappt aber nicht. Wenn ich 2 LED direkt an die Portleitungen hänge blinken die eigentlich richtig, soweit ich das einschätzen kann, aber an dem PCF blinkt nichts. Hab ich was in dem Code falsch, oder in der Schaltung(kommt im nä. Post)? Ab und zu blinken die LED's ganz schwach, kaum zu erkennen. Hab es auch schonmal mit nem anderen IC probiert, weil ich dachte den 1. hätte ich kaputt gemacht, aber ohne besseres Ergebnis. Achja, was ist den an der Bauanleitung im 1. Post schlecht, was könnte man besser machen=
Hallo für was hast du R7 und R8 eingebaut? Also ich verwende den I2C-Bus auch allerdings mit einem AVR und normalerweise verden SCL & SDA direkt mit dem uC verbunden!! ==> ich denke das das nicht richtig ist mit den 330 Ohm! mfg mathias
Hallo Christian, hier kommen direkt mehrere Tipps: Zur Schaltung: 1) Die 330R-Widerstände kann man einbauen, muß man aber nicht. Wenn man sie aber verwendet, gehören sie an jedes I2C-Bus-Bauteil, sprich also sowohl vom µC zum Bus, als auch vom PCF8574 zum Bus. Der Bus selbst hat dann die 10k-Pullups. 2) Die LEDs sind falschrum eingebaut. Zur Software: 3) Welchen Chip genau verwendest Du? Den PCF8574 oder PCF8574A? Sie haben unterschiedliche Basisadressen, um mehr als 8 Bausteine dieser Art an den Bus anschließen zu können. Du benutzt in Deiner Software die Adresse 0x70. Das ist richtig für den PCF8574A. Für den ohne A muß die Adresse 0x40 sein! 4) Nachdem Du (der µC, der Master auf dem I2C-bus) das Adressbyte gesendet hat, muß der Master einen zusätzlichen SCL-Impuls generieren und dabei SDA auf High halten. Währed dieser Zeit kann der Slave die SDA-Leitung auf Masse ziehen, und damit den Empfang der Daten bestätigen. Dieses Acknowledge kann/sollte vom Master ausgewertet werden. Auf jedenfall aber muß dieser 9. SCL-Impuls generiert werden! 5) Am Ende Deiner i2c_schreiben-Routiene solltest Du unbedingt noch ein SCL=0 einfügen. Sonst kann es beim Übergang von i2c_schreiben zu i2c_stopp passieren, daß eine zusätzliche Start-Condition erzeugt wird. Also in etwa so: void i2c_schreiben(unsigned char dat) //Byte auf I2C ausgeben { unsigned char i; for (i=0;i<8;i++) { scl=0; //scl auf 0 i2c_warten(); sda=((dat & 0x80)?1:0); //msb von dat auf sda ausgeben dat<<=1; //dat um 1 nach links schieben i2c_warten(); scl=1; //scl auf 1 -> slave liest sda i2c_warten(); }; scl=0; //scl auf 0 i2c_warten(); sda=1 i2c_warten(); scl=1; //scl auf 1 i2c_warten(); // hier kannst Du jetzt SDA abfragen, sollte low sein, dann war Übertragung O.K. scl=0; //scl auf 0 } 6) Du warst sehr großzügig mit i2c_warten. Es wird so auf jedenfall funktionieren, es muß aber sicher nicht so lange gewarte´t werden, und Du mußt die Warteschleife auch nicht nach jedem SDA und SCL-Wechsel aufrufen. Schau mal ins Datenblatt nach den hold-Zeiten. Viel Erfolg, Markus_8051
danke für die tipps, werd ich gleich mal ausprobieren. die wartezeiten hab ich nur so lange gemacht, um auch sicher zu sein, das das alles stimmt, und auch, um an direkt angeschlossenen leds was erkennen zu können.die leds hab ich auch richtig angeschlossen, hab den schaltplan nur gestern schnell gezeichnet, da kann ich mich geirrt haben.
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.