Hallo Forengänger ! Eigendlich benutze ich ja ATmegas und ATTinys.. Aber...Ich habe noch einige 8051 Chips bzw. deren Derivate zu liegen. Da wollte ich ein paar kleine Anwendungen mit machen..eine LCD Uhr solte bei herrauskommen und vielleicht noch ein paar andere nützliche(?) Dinge. Sollte sich hier unter uns wer befinden, der auch damit arbeitet, experimentiert,programmiert etc. würde ich über eine kleine Hilfe sehr freuen... Ich kann die Programme in C, ASM schreiben, kompilieren und auch auf den Chip flashen, nur habe ich keinen Erfolg das praktisch was dabei zu sehen ist, eine einfache Blinkschaltung ZBsp. Code: // ------------- READS51 generated header -------------- // module : C:\µC8051\ledblink2\led.c // created : 21:38:21, Thursday, March 20, 2014 // ----------------------------------------------------- #include <sfr51.h> #ifndef F_CPU #define F_CPU 12000000UF #endif //delay function void msdelay(unsigned int value){ unsigned int x,y; for(x=0;x<value;x++); for(y=0;y<1275;y++); } void main(){ int i=0; P2=0x00; //all pin of PORT2 declared as output //infinite loop while(i <= 1000) { P2=0xFF; //all pinPORT 2 high LED >> +5V OFF msdelay(55); //delay P2=0x00; //all pinPORT 2 low LED >> +5V ON msdelay(50); //delay i=i+1; } } Dieses beispeil habe ich verwendet aber nix geht. Benutzen tue ich von Rigel Reads51 als Programmier-IDE Ich habe ein handelsübliches DeveloperBoard für ATMEL und normale 8051. Was mache ich falsch ???? :( Danke & Gruss Gerhard edit: Das Stk500 dient als Bustreiber zu den LEDs(STK500) Fotos : http://robot.oderlachs.de/8051/images/8051blink.jpg http://robot.oderlachs.de/8051/images/8051devboard.jpg
Funktioniert das Board denn ansich ? Will sagen, siehst du mit einem Scope ob die Ausgänge abwechselnd 1 und 0 sind. Dein Programm solltest du dir auch noch mal ansehen.
1 | while(i <= 1000) |
Dein Kommentar hierzu "infinite loop" stimmt das ?
1 | unsigned int x,y; |
2 | for(x=0;x<value;x++); |
Google mal nach volatile.
Gerhard Hinze schrieb: > Ich habe ein handelsübliches DeveloperBoard für ATMEL und normale 8051. Beim 8051 mußt Du Reset auf Low ziehen, damit er losrennt. Setze einfach mal nur den Port auf 0xA5, ob die LEDs funktionieren.
Moin, mach mal
1 | for(x=0;x<value;x++); |
2 | for(y=0;y<1275;y++); |
zu
1 | for(x=0;x<value;x++) |
2 | for(y=0;y<1275;y++); |
Noch besser:
1 | for(x=0;x<value;x++) |
2 | {
|
3 | for(y=0;y<1275;y++); |
4 | }
|
--jmp
Habt alle erst recht vielen Dank ! Ich bin wirklich blutiger Einsteiger bei 8051. Das DevBoard habe ich bei Ebay erstanden und keinerlei Beschreibung dazu habe. Ich habe eine Auswahl AVR oder 51 per Jumper. es kann schon sein, das die Hardware-Perepherie nicht stimmt. Zumindest kann ich über ein STK200 Clon über LPT >> ISP den ChipCode indentifizieren... Ich werde mich weiter mit befassen, die Hardware zu bestimmen vom Board. Der ResetPin ist auf LOW, habe ich gemessen, ob er nun konkret auf GND liegt oder per Widerstand auf LOW gezogen weiss ich noch nicht. Ich habe leider keinen Osszi damit ich die pegelverläufe an den Ports besser sehen könnte.. Nochmals Danke für erste Hinweise, war schon was wert... Gruss Gerhard Edit Hier die ungefähre Schaltung, nur das bei mir die Taster und LEDs fehlen http://i.ebayimg.com/t/C51-AVR-MCU-development-board-DIY-learning-board-kit-Parts-and-components-/00/s/NzQ4WDEyNjE=/$(KGrHqR,!pgFBYBm!81vBQjjcIQl9w~~60_57.JPG
:
Bearbeitet durch User
Gerhard Hinze schrieb: > Ich habe leider keinen Osszi damit ich die pegelverläufe an den Ports > besser sehen könnte. Eine LED mit Vorwiderstand z.B. 470 Ohm reicht für einen Blinktest. Man muß sie aber zwischen Pin und VCC betreiben, nicht an GND. Der Reset-Pin ist zu hochohmig für eine LED. Ein alter Kopfhörer ist auch ein sehr gutes Prüfgerät zur Fehlersuche im NF-Bereich bis runter zu Gleichspannung. Man hört Knacken oder Töne laut oder leise, Rauschen und Knirschen in schlechten Verbindungen, sowas war bei der Fehlersuche in Telefonanlagen üblich. Man braucht sich mit dem Auge auch nicht auf eine LED oder Instrument zu konzentrieren, sondern rein nur auf die Schaltung. Bei der Fehlersuche war man da viel schneller als mit dem Multimeter. Evtl. Kondensator und Vorwiderstand am Kopfhörer einbauen (Hochpaß und galvanische Trennung), evtl. Schutz fürs Ohr gegen Überlautstärken, an eine Leitung eine Krokoklemme, an die andere eine Meßspitze, wenn man sowas vor hat. Mit dem "Prüfgerät 1A" der Post (das ist ein halber Kopfhörer mit nur einer Hörmuschel) durfte man sogar an der Netzspannung 230V hören (dann allerdings vom Ohr abgenommen), und andererseits hört man damit noch Millivolt. Es hatte zwei umschaltbare Impedanzen, 600 Ohm und 10k Ohm.
Ist dir denn eine Erkenntnis zum Programmablauf gekommen ?
1 | #define led_out P2_7 // LED welcher PIN auch immer
|
2 | |
3 | volatile unsigned int i; |
4 | |
5 | void main (void) |
6 | {
|
7 | while (1) { |
8 | led_out = !led_out; |
9 | for ( i = 1; i < 40000; i++ ); |
10 | }
|
11 | }
|
Zum nachdenken mal ein Beispiel.
Nun habe ich den Quarz gewechselt , weil aus der seriellen Schnittstelle nur "Mischmasch" rauskam...Org. 12 MHz gegen 11,5902 getauscht... Nun bekomme ich an der ser. Schnittstelle die ganzen ASCII Zeichen ausgegeben. Eigendlich sollte "Hello World" rauskommen..aber wenigstens etwas. Na mal sehen wie es weiter geht..das Blinken geht noch nicht... Meine LEDs sind gegen +5V über eine Transistorstufe geschaltet(STK500) sie sind bei LOW dann ON, also LOW aktiv. Ich werde weiter die Tips hier probieren....fällt ja kein Meister schnell vom Himmel... Gerhard
Gerhard Hinze schrieb: > 12 MHz gegen 11,5902 getauscht... Das wäre doch nicht nötig gewesen! Mit 12MHz bekommt man auch 9600BAUD eingestellt, und Timer sind mit den 12MHz auch besser einstellbar als mit dem Baudratenquarz. Aber jeder so, wie er möchte. Außerdem ist der MAX232 auch nur bis 20000BAUD spezifiziert.
Hallo Wilhelm, ja das weiss ich von anderen Projekten. Trotzdem Danke für den Hinweis ! Es ist nur so, das ich vorgefertigte Examples erst mal nutze. Da diese für einen 115902 Q geschrieben war, habe ich einfach mal nen anderen Q raufgesteckt. Edit: Ich muss mich auch erst in die Baudeinstellung (Code) hierbei einarbeiten, hatte bislang nur AVR's ... Heute habe ich nun von Keil mir eine DemoIDE installiert , nun geht es wenigstens schon mit den I/O Programmen, die LEDs blinken und leuchten wie sie sollen.... Ich möchte mit den 8051er auch nicht mein weiteres Leben in Sachen Programmierung verbringen, da nun mal die Entwicklungsumgebung(Boad und Chips) vorhanden ist, möchte ich es mal Probieren, wie andere vielleicht mal Kreuzworträtsel lösen o.ä. Auf dem Dev.Board ist gleich eine Steckleiste für ein LCD , daraus wird dann später ne LCD Uhr werden...für die 2..3 anderen Chips werde ich mir ein PCB einfallen lassen und auch noch was daraus basteln , so war die einmalige Geldausgabe für das Dev-Board + Chips nicht unnütz.... Na ja vieleicht kann ich bei der Verwendung der 8051er auch meinne grösseren Vorrat an LCDs abbauen und was Nützliches daraus machen.. Somit mit besten Dank und Grüssen Gerhard Nachtrag: habe mich noch mals mit dem Hello World-Quellcode befasst..und.. Nach Änderung der Terminaleinstellungen geht es jetzt: http://robot.oderlachs.de/8051/images/serial_ok.jpg
:
Bearbeitet durch User
Hallo Gerhard, bei den Controllern von Intel - solltest du esrt mal genau angeben welchen Typ und "wie" Du ihn benutzt. -Benutzt du einen vom Typ, z.B. 8751 (mit internem Eprom) oder einen (mit externem Eprom 80C51, 80C52) dann wirst du einen Pin (PGME?) auf GND legen müssen, damit der Adressbus nach aussen geschaltet wird. Um ein Bord zu testen ob es hardwaremässig überhaupt funktioniert ist es sehr hilfreich in einem solchen Fall ein Eprom zu schissen das gesammt "nur NOP-Befehle enthält". Damit erreicht man, dass beim Start "an allen Adresspins" die Adressen von "000 bis FFF" ausgegeben werden und mit einem Odzilloskop kann an den Adresspins das Signal beobachtet werden, genau wie an einem binären Zähler, z.B. einem 4040. An den Höheren Adresspins sollte sogar mit einer "LED" das Blinken beobachtet weden können. Bei den Typen mit internem Eprom z.B. (87Cxx) ist es schwerer die Funktion zu prüfen. Wolfgang
umsteiger schrieb: > bei den Controllern von Intel - solltest du esrt mal genau angeben > welchen Typ Im Eröffnungsbeitrag ist ein Link zu einem Foto angegeben, auf dem man ihn sieht.
Danke, ja ich muss trotzdem dem Umsteiger etwas Recht geben, genau gesagt arbeite ich zur Zeit mit dem ATMEL Chip AT89S51. Da habe ich schon was zum "laufen" gebracht, ein Hello World und eine 8 Led BlinkZeile... :( Weiter habe ich noch STC 89C51RC und den Temic oder Phillips 80C52. Temic darum weil ein grosses T auf dem Chip ist so denke ich das so.. Das diese wohl alle den 8051 "nachahmen" aber jeder ein bischen doch "anders" ist habe ich schon gemerkt... Ich sagte ja ich blin "blutjunger Einsteiger" bei dieser Chipserie... Ich habe auch ein "dickes Buch" <Das grosse 51er Anwender Buch> aber da werde ich nicht so ganz schlau, ist ganz in Assembler geschrieben. Ich verstehe das zwar, aber doch möchte ich bei "C" bleiben. Auch hatte ich Probleme mit dem Dev. Board, weil keine Beschreibung..wenn ich den ISP Stecker abgezogen hatte lief das Prog nicht mehr, erst als ich den Jumper für die Reset-Umschaltung (AVR-8051)entfernte lief das Prog dann weiter. Wie gsesagt ich lerne mich da so ein wenig erst mal ein...und das ein Programm, nicht wie ein ein selbes nur auf ner anderen IDE- oder Programmierumgebung ist, habe ich auch schon gemerkt.. ich dachte bislang C ist C und 8051er ist 8051er... ;) Aber es wird habe so einige Fallstricke schon gefunden und entfernt ;)
Gerhard Hinze schrieb: > ATMEL Chip AT89S51 Das ist anscheinend ein Flash-µC, Gerhard Hinze schrieb: > Phillips 80C52 und dieser ein maskenprogrammierter µC, der braucht externes EPROM. Man wird sie deswegen nicht einfach so untereinander tauschen können.
Danke für die Ausführungen ! Ich möchte auch sortieren, die Guten ins Kästchen und die anderen in den Elektroschrott... Ich möchte da nicht grosse Sachen aufbauen...nein das habe ich nicht vor. Die AT89S51 werde ich wohl verwenden können , vielleicht auch noch den STC-89C51RC ... Das Probieren wars mir aber wert, nicht das ich gleich alles als nutzlos entsorge.. Gruss Gerhard
:
Bearbeitet durch User
Gerhard Hinze schrieb: > Die AT89S51 werde ich wohl verwenden können , vielleicht auch noch den > STC-89C51RC ... > Das Probieren wars mir aber wert, nicht das ich gleich alles als nutzlos > entsorge.. Das Foto oben sieht so aus, als ob da kein externes EPROM für einen normalen 8051 oder 8052 drauf ist. 8051 und 8052 sind Maskenversionen eines 8031 oder 8032, man kann sie gelegentlich als Sonderposten Abfall mal kaufen, oder findet sie in Altgeräten. Mit dem Pin EA auf Low ist das Masken-ROM abgeschaltet, und ein gebrauchter 8051 oder 8052 läßt sich dann vollwertig wie ein ROM-loser neuer 8031 oder 8032 betreiben.
Ich habe die mal irgendwo von irgendwelchen Boards verschidener Steuerungen abgenommen eher die in den Müll kamen.... Will gerade eine LCD Uhr aufbauen, muss aber erst nen Anschlussadaper löten.. Meine LCD haben etwas geänderte Anschlüsse, als wie sonst 1...16 in einer Reihe. Ein solcher LCD Anschluss ist auf dem Dev.Board vorhanden.. Na mal sehen ob das mit der Uhr was wird... Gerhard
Gerhard Hinze schrieb: > Will gerade eine LCD Uhr aufbauen, muss aber erst nen Anschlussadaper > löten.. Das verlinkte Foto mit dem Board sieht ja grundsätzlich brauchbar aus. Auch um ein LCD anzuklemmen, es sind ja wie ich sehe alle Ports an Stiftleisten.
Gerhard Hinze schrieb: > Ich muss mich auch erst in die Baudeinstellung (Code) hierbei > einarbeiten, hatte bislang nur AVR's ... Es gibt auch 8051 mit internem Oszillator (kein Quarz nötig) und Bootloader, damit geht es einfacher als beim AVR z.B. LPC922 im DIP-20 lässt sich mit dem kostenlosen FlashMagic flashen: http://www.flashmagictool.com/ Hätte außerdem noch den Vorteil dass die ARM-Nachfolger hier z.B. LPC812 dieselbe Peripherie und Bootloader haben, damit wäre ein späterer Umstieg problemlos.
Hier eine annähernde Schaltung, es ist die Weiterentwicklung. bei meinem Board sind keine Taster und LEDs an den IO Ports schaltbar, d.h. sie sind gar nicht auf dem Board. http://robot.oderlachs.de/8051/images/boardschaltung.jpg Die LCD-Beispile aus dem Web , gehen nicht so richtig. Bin gerade dabei meinen eigenen Code dafür zu schreiben, um erst mal ein paar Zeichen auf dem LCD zu sehen... Wenn soweit ist sag ich hier Bescheid mit Foto.. ;) Gerhard
:
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.