Hallo, wir machen jetzt ein kleines Projekt (für die Schule) Spannungen und Ströme auf einem Display darstellen soll. Da ich mich schon seit längerem mit PIC beschäftige, habe ich jetzt eine Schaltung gekrizelt und einiges vom Pic übernommen und stadtdessen einen ATMEGA 8 draufgesetzt. Folgende Daten: Stromversorung: stabilisierte 5V Display: 4bit Modus, HD44780 kompatibel interene ADC Referenzspannung Könnt ihr mal drübersehen ob ihr irgendwelche fehler seht? MfG Lukas
Willst Du den zum Programmieren immer aus dem Sockel ziehen? Mach' mal noch einen ISP Anschluss dran.
Die LCD Ansteuerung ist nicht erkennbar (lesbar) Mir fehlt der ISP Anschluss Ansonsten sieht der Teil links vom µC gut aus.
Auf der linken Seite kann ich die Netzlabels einfach nicht lesen. Du hast so viele freie Pins, ich würde RXD und TXD frei halten, um später (oder früher bei der Entwicklung) eine RS232 Verbindung zum PC zu haben. Die ISP-Programmierleitungen sind nicht angeschlossen. Wie programmierst du den AVR? Was heisst PWM-Lüfter? Ist das ein Messsignal (Lüfter => AVR) oder ein Steuersignal (AVR => Lüfter). Wenn letzteres, dann eher an ein OCR1x hängen.
Ja ISP ist ne Gute ide, habs eben dazugemacht. PWM: Ja der AVR soll ein PWM ausgeben und damit die Drehzahl (Leistungsabhänig regeln, ist nicht ganz soo das wahre aber die Lüfterregelung ist nicht so wichtig eher optional). RS232 könnte ich wirklich frei halten, muss das aber noch mit meinem Projektpartner besprechen. MfG Lukas
Bist du sicher, dass du beim ISP Anschluss dein eigenes Süppchen kochen willst? Hier http://www.mikrocontroller.net/articles/AVR_In_System_Programmer#Pinbelegung findest du die beiden gebräuchlichen Standard-Pinbelegungen für 6-pin und 10-pin Anschlüsse
Lukas B. schrieb: > Ja der AVR soll ein PWM ausgeben und damit die Drehzahl regeln >> dann eher an ein OCR1x hängen. denn dann kannst du die PWM per Hardware des AVR erledigen lassen.
Karl heinz Buchegger schrieb: > Bist du sicher, dass du beim ISP Anschluss dein eigenes Süppchen kochen > willst? das Problem ist, ich hab für die ganze Sache recht wenig Platz, weil es soll ein Aufsatz werden, der hinter das Display geschraubt wird, Problem: kein SMD, keine Doppellayer. Für das ISP kann ich doch ein Adapterkabel machen oder ?! zur PWM: Stimmt, es ist sinnvoller eine Hardware-PWM zu machen, muss ich nochmal das Pflichenheft ändern.
Lukas B. schrieb: > Karl heinz Buchegger schrieb: >> Bist du sicher, dass du beim ISP Anschluss dein eigenes Süppchen kochen >> willst? > das Problem ist, ich hab für die ganze Sache recht wenig Platz, weil es > soll ein Aufsatz werden, der hinter das Display geschraubt wird, > Problem: kein SMD, keine Doppellayer. > > Für das ISP kann ich doch ein Adapterkabel machen oder ?! Kannst du. Aber eigentlich gehen die ISP Verbindungen zu den Standard-Anschlüssen relativ einfach, wenn der Wannenstecker neben den Pins mit den Anschlüssen platziert wird. Klar kannst du auch ein Adapterkabel machen. Aber wozu? Verdrahte gleich alles richtig auf der Platine und du hast nicht noch ein Teil, das irgendwo rumlungert und genau dann unauffindbar ist, wenn man es braucht. Im Zweifel orientiert man sich an der Pinbelegung vom Kabel, welches mit dem Programmer mitgeliefert wurde. Und meistens ist das eine der beiden im Link angegebenen.
Wenn du schon alles richtig machen willst, dann hol dir mal bei cadsoft eine neue atmel.lbr, denn viele ATmegas haben keinen AGND (analog gnd) sondern nur GND. Das gilt besonders für die hier im Forum oft verwendeten ATmega8, 16, 32, 644 usw.
Karl heinz Buchegger schrieb: > Kannst du. > Aber eigentlich gehen die ISP Verbindungen zu den Standard-Anschlüssen > relativ einfach, wenn der Wannenstecker neben den Pins mit den > Anschlüssen platziert wird. Das problem ist halt wir haben auf der Platine sehr wenig Platz, darum kann ich nur 90° gewinkelte Pfostenstecker verwenden. Ich werde jetzt den Schaltplan nochmals neu machen. Grüße Lukas
Lukas B. schrieb: > Karl heinz Buchegger schrieb: >> Kannst du. >> Aber eigentlich gehen die ISP Verbindungen zu den Standard-Anschlüssen >> relativ einfach, wenn der Wannenstecker neben den Pins mit den >> Anschlüssen platziert wird. > > Das problem ist halt wir haben auf der Platine sehr wenig Platz, darum > kann ich nur 90° gewinkelte Pfostenstecker verwenden. Das versteh ich jetzt nicht. Was hat das damit zu tun, welche Belegung du diesen Pins gibst? Ich glaube wir reden aneinander vorbei. Es geht nicht darum, ob du 6-polig oder 10-polig benutzt. Es geht darum, wie du die 6 Stifte mit den Signalen belegst.
Karl heinz Buchegger schrieb: >> Das problem ist halt wir haben auf der Platine sehr wenig Platz, darum >> kann ich nur 90° gewinkelte Pfostenstecker verwenden. > > Das versteh ich jetzt nicht. > Was hat das damit zu tun, welche Belegung du diesen Pins gibst? > > Ich glaube wir reden aneinander vorbei. Es geht nicht darum, ob du > 6-polig oder 10-polig benutzt. Es geht darum, wie du die 6 Stifte mit > den Signalen belegst. Ja stimmt, hab ich falsch verstanden. Dann werde ich den 6 Poligen Stecker verwenden.
Hab jetzt die Schaltung nochmals überarbeitet. Die PWM ist wird nun auf dem OC1A ausgegeben und die ISP-Schnittstelle sollte dem "Standard" entsprechen. Grüße Lukas
Ich seh gerade, das man den PWM ausgang nicht erkennen kann, hängt am Pin 15, PB1(OC1A).
Hallo, ich habe mir (Februar 2010) das AVR-Net Board von Pollin gekauft. Der Grund war die vorhandene Ethernetschnittstelle über die ich kontinuirlich Daten auf einen anderen Rechner übertragen will. Über die ISP Schnittstelle habe ich Mittels PonyProg den Flash ausgelesen und festgestellt das 28 kb durch die Firmware belegt bzw. reserviert sind. Die restlichen 4 kb will ich für eigene Routinen nutzen. Das Problem: Die Firmware muss an geigneter Stelle durch beispielsweise einen call Befehl ergänzt werden. Die Quellen der Firmware stehen nicht zur Verfügung. Am einfachsten währe es deshalb den HEX Dump durch einen call mit direkter Sprungadresse zu ergänzen. Jede andere Lösung zur Einbindung eigener Routinen währe mir natürlich auch recht. Meine Bitte: Kennt jemand die Pollin Firmware -oder eine alternative Firmware- und kann mir sagen an welcher Stelle im HEX File ich einen call Befehl mit Sprungadresse einfügen kann? Ich programmiere in Assembler weil ich da einige Erfahrungen habe. Im Voraus Danke für die Antwort. Jörg
Findet ihr noch fehler oder kann ich jetzt Layouten, ich denke es müsste jetzt Passen oder ?!
Ich denke, das sollte so jetzt passen. Denk dran: C3, C6, C7 nahe an die entsprechenden Pins ran. Eines ist mir noch aufgefallen: Du sagst ganz am Anfang: LCD im 4 Bit Modus, hast aber alle 8 Datenbits vom LCD verdrahtet. Das ist jetzt sicher kein Beinbruch und lässt natürlich beide Optionen offen. Aber wenn ihr sowieso auf eine 4 Bit Übertragung aus seid, könnte man am Anschluss Pins einsparen bzw. ein Kabel mit weniger Adern nehmen. Und wenn du die R/W Leitung vom LCD sowieso auf die Platine führst, kannst du sie auch gleich am µC anschliessen anstatt sie fix auf GND zu legen. Musst sie ja nicht benutzen. Aber wenn man sie benutzen will (zb die Fleury Lib will sie haben), dann ist sie da. Pins am µC hast du ja noch frei und wenn es routungstechnisch kein Problem macht .... Ach, ich seh grad, du hast dir PD0 und PD1 freigechaufelt. Das ist gut. Ich würde da allerdings den LCD Anschluss noch ein wenig umwürfeln, so dass die 4 Datenleitungen ein Nibble bilden (also entweder an die 0-3 Datenpins oder 4-7). Klar kann man das in Software ausgleichen, das ist kein Beinbruch. Aber einfacher ist es doch, wenn ich ein Byte einfach in Nibble zerlegen kann und dann die 4 Bit nicht auch noch grossartig zurechtschieben muss um sie auf Position zu bringen. Ohne Not würde ich die Datenleitungen da nicht 'so krumm' an den Port schalten wenns nicht sein muss.
Das war bis jetzt die Pflicht, was ist mit der Kür? :-) Du hast weiter oben mal erwähnt, dass ihr Platzprobleme kriegt. Denkst du, du bringst noch einen Transistor samt Basiswiderstand unter? Dann könnte man die Hintergrundbeleuchtung des LCD über eine PWM vom µC aus einstellbar machen. Den OCR1B hast du ja noch frei. Von dort über den Basiswiderstand auf einen NPN. Collector from NPN an Pin 16 vom Stecker. Emitter an Masse. Als NPN geht sicherlich ein BC373 oder so etwas in der Richtung. Ist ein Gimmick, zugegeben.
Hallo, ich bin auch Anfänger und sehe gerade deinen Schaltplan. Hier habe ich eine Frage zu EAGLE. Wie machst du diese grauen "Fähnchen" wo du beschriften kannst, was daran angeschlossen wird?
Karl heinz Buchegger schrieb: > Du hast weiter oben mal erwähnt, dass ihr Platzprobleme kriegt. Denkst > du, du bringst noch einen Transistor samt Basiswiderstand unter? Dann > könnte man die Hintergrundbeleuchtung des LCD über eine PWM vom µC aus > einstellbar machen. Den OCR1B hast du ja noch frei. Von dort über den > Basiswiderstand auf einen NPN. Collector from NPN an Pin 16 vom Stecker. > Emitter an Masse. Als NPN geht sicherlich ein BC373 oder so etwas in der > Richtung. Jein, ich würd's ja gern einbauen, aber ich wills nicht übertreiben, da meine Projektpartner nicht so "Sattelfest" sind (nach dem Moto: weniger ist mehr ;)) Zum 4 Bit Modus, ja beim Stecker sind alle 8 Datenleitungen "beschriftet", aber nur die 4 Datenleitungen angschlossen. Zum Eage: Gib der leitung einen Namen, dann auf links unten gibts ein Symbol mit ABC und einem Strich, draufklicken, über der Befehlszeile gibts dan ein Icon mit dem Fähnchen, anklicken und dan die Leitung anklicken. du Kanst dan auch noch die Größe und so ändern
Dazu muss aber xref auf on geschaltet sein (change xref = on) und gibt's auch nur in der 5.x version ;-)
So hab jetzt mal ein Layout gemacht. Ich bin zwar damit gar nicht zufrieden, brings aber Einseitig und ohne SMD nicht besser her. Hat noch jemand Tipps oder Anregungen?? Mfg Lukas
Willst du die Platine selber fertigen oder gibst du die in Auftrag? Wenn du sie selber fertigst: Druck dir alles 1:1 aus und sieh dir den Ausdruck an. Die Restringe deiner Brückenendköpfe sind winzig! Denk daran: Du musst das ätzen, bohren und löten können! Wenn du den Quarz ein wenig nach links rückst passen die Lastkondensatoren für den Quarz noch locker bei den Anschlusspins rein. Wenn du links für den Widerstand die Anschlusspins weiter auseinanderrückst, brauchst du die Leitungen nicht so zusammenquetschen. Ditto rechts: Den Widerstand könnte man so legen (Anschlüsse auseinander), dass zumindest 2 der 3 Brücken unnötig werden. X4 ein wenig näher zum Prozessor und schon kannst du mit der Vcc Leitung aussen rum fahren und wieder eine Brücke einsparen Wenn du selber fertigst musst du auf die eine Bahn um unteren Rand achten. Bahnen die direkt am Rand liegen verschwinden schon mal gerne in der Fertigung (zumindest bei mir)
Ich habe jetzt das Layout nochmals gemacht, ich werde es vorübergehend lassen und in der Schule fertigen lassen. Ich werde mich nun der Programmierung witmen, werde dazu erst mal das AVR-Tutorial auf den Kopf stellen und die Benötigten Programme installieren. Das Programm sollte folgende Funktionen besitzen: - Beim einschalten wird auf dem Display eine kleine kurze Meldung erscheinen, die zeigt, was das Gerät kann ( ca. 2-3sec) - Dann sollte die Spannung, der Strom, die Abgegebene Leistung auf dem Display dargestellt werden. - die Drehzalregelung des Lüfters sollte über die Verlustleistung geregelt werden (ev. Mittelwertbildung oder so was) Programmieren möchte ich alles in C mit dem GCC-Compiler, anfangen werde ich mit der Ansteuerung des LCD's, gibts gute LCD-Libs die ihr mir Spontan empfehlen könnt? Grüße Lukas
Hallo, wir haben nun mit der Proogrammierung begonnen, zur ansteuerung des LCD's verwenden wir das AVR-GCC-Tutorial: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung. jetzt hab ich folgendes Problem: ich habe wie oben beschrieben, die Port's für's LCD DB4 - DB7 sind auf DB4 - DB7 gelegt. In der LCD-routine.h ist eine Anmerkung, das die Port's DB0 - DB3 mit dem LCD verbunden werden.
1 | // Pinbelegung für das LCD, an verwendete Pins anpassen
|
2 | |
3 | #define LCD_PORT PORTD
|
4 | #define LCD_DDR DDRD
|
5 | #define LCD_RS PD2
|
6 | #define LCD_EN PD3
|
7 | // DB4 bis DB7 des LCD sind mit PD0 bis PD3 des AVR verbunden
|
Kann uns da jemand weiterhelfen?? Grüße Lukas
Die Benutzen einfach den nibble von dem Port zur Ansteuerung mit Daten. Du willst alle Ports ändern, das geht mit dem Code nicht direkt. Du musst mal hier im Forum gucken da gibt es eine abgewandelte Version mit der man alles ändern kann!
Lukas B. du vermanschst Portpins mit der Bezeichnung DBx mit Portpins mit der Bezeichnung PDx. Die Portpins des LCD sind DBx bezeichnet. Die Portpins des AVR sind PDx bezeichnet (wenn PORTD am AVR benutzt wird). Die Verbindungen LCD <-> AVR müssen also DBx <-> PDx lauten. > ich habe wie oben beschrieben, die > Port's für's LCD DB4 - DB7 sind auf DB4 - DB7 gelegt. Das ist eine vermanschte Verbindung "LCD <-> LCD" > In der > LCD-routine.h ist eine Anmerkung, das die Port's DB0 - DB3 mit dem LCD > verbunden werden. > ... > // DB4 bis DB7 des LCD sind mit PD0 bis PD3 des AVR verbunden Das bedeutet: LCD AVR =========== DB4 PD0 DB5 PD1 DB6 PD2 DB7 PD3
Danke Stefan, das hab ich schon verstanden,das mein Problem, das isch habe, es ist DB4 mit PD4 verbunden.... > LCD AVR > =========== > DB4 PD0 > DB5 PD1 > DB6 PD2 > DB7 PD3 Ich mir jetzt den einen Threath durchgelesen und werden die kommenden tage die Schaltung test. Danke @all Grüße Lukas
Mir ist noch gerade was aufgefallen, Zwar nicht kritisch und weiß auch nicht genau was du für eine Festinduktivität benutzt, aber wenn SMCC nimmst mach einen größeres "Raster" auf 12mm, sonst wird es eng mit dem Biegen.
Soenio schrieb: > Mir ist noch gerade was aufgefallen, Zwar nicht kritisch und weiß auch > nicht genau was du für eine Festinduktivität benutzt, aber wenn SMCC > nimmst mach einen größeres "Raster" auf 12mm, sonst wird es eng mit dem > Biegen. meinst?? Wird woll reingehn. Spulen hier, ähneln einem Widerstasnd nur ein wenig dicker...
Hallo, wir haben nun die Schaltung aufgebaut. Haben ein kleines testprogramm aus dem AVR-Tutorial zusammen kopiert und versuchen dies in den AVR zu proggen. Wir benutzen das AVR Studio und als Programmer verwenden wir den MyAVR Smartprog. ich habe versucht das Compilierte Programm in den AVR zu laden, und zwar über: Tools --> AVRprog --> Hex file geladen und dann auf Programm Flash. Leider funktioniert es irgendwie nicht und es kommt eine Fehlermeldung, das er in eine Adresse nicht schrieben kann oder so was ähnlichs (siehe Anhang). Ich habe leider zu spät gelesen, das ich die Fusebits setzen muss, wir wissena ber auch nicht wo ??!!, im AVR prog gibts noch weitere einstellungen unter Advanced, wissen aber nicht was wir da einstellen müssen. Ich hab mal das gesamte Projekt als ZIP-File angehängt. Grüße Lukas
Der Inhalt deiner HEX-Datei von 11:07 Uhr ist nicht sinnvoll:
1 | :020000020000FC |
2 | :100000000000FF01FFFF00F8000000000000FFFFFC |
3 | :10001000FFFF0000000000003F00FFFF00FF0000A6 |
4 | :1000200000000000FF00FFFF00FF000000000000D4 |
5 | :10003000FFFFFFFF0000000000000000FFFFFFFFC8 |
6 | ... |
Die anderen Dateien im Ordner Default von 9:44 Uhr sehen gut aus. Mich wundert dass allein die HEX-Datei neuer ist. Kann es sein, dass das eine aus dem Atmega8 ausgelesene und verstümmelte HEX-Datei ist? Ich würde ein Rebuild All versuchen, um die richtige HEX-Datei zu restaurieren. Kannst du mal einen exakten Link zur Beschreibung deines Programmers schicken? Bei MyAVR finde ich nur andere Bezeichnungen als dir von dir angegebene: http://shop.myavr.de/index.php?sp=artlist_kat.sp.php&katID=16 Wenn ich mir z.B. die Beschreibung des mySmartUSB light (http://www.myavr.info/download/produkte/mysmartusb_light/techb_mySmartUSB-light_de_en.pdf) durchlese, habe den Verdacht, dass du mit AVRPROG die falsche Programmiersoftware verwendest.
Hallo, ich verwenden folgenden Programmer: http://shop.myavr.de/index.php?sp=article.sp.php&artID=42 Das komische an der ganzen Sache ist, wenn ich auf Write Flash gehe schreibt er irgendwas und bringt dan die obige Fehlermeldung, Lese ich den Flash bringt er mir keine Fehlermeldung... ok von mir aus ich stekte das ISP Kabel ab und lies ihn nochmal lesen, und siehe da er lass fehlerfrei, ich weis nicht was das Ding gelesen hatt auf jedem Fall das Falsche Ich steh zur zeit aum schlauch und Komm nicht weiter, ich find im AVR nicht mal die Einstellungen wo ich die Fusebits setzen kann... Grüße Lukas
Lukas B. schrieb: > Ich steh zur zeit aum schlauch und Komm nicht weiter, ich find im AVR > nicht mal die Einstellungen wo ich die Fusebits setzen kann... Zu den Fuseeinstellungen kommt man im AVR Prog unter dem Button Advanced ACHTUNG Leseversuche sind in Ordnung. Schreibversuche erst machen, wenn alles tipitopi funktioniert! AVR Prog User Guide http://www.atmel.com/dyn/resources/prod_documents/DOC1021.PDF myAVR mySmartUSB MK2 Version 2.11 Technische Beschreibung http://www.myavr.info/download/produkte/mysmartusb_mk2/techb_mysmartusb-mk2_de_en.pdf In deiner Schaltung vermisse ich eine onboard Spannungsversorgung, d.h. Spannung kommt von "irgendwo". Wenn du beim ISP Programmieren die Schaltung durch den myAVR mySmartUSB MK2 versorgst, dann unbedingt alle Verbraucher ausser dem Atmega8 abklemmen. Weil du kannst nur <80mA aus dem ISP Adapter entnehmen. Wenn du als Last ein LCD angeschlossen hast, wird die Vcc in den Keller gehen. BTW. hast du schon Messungen zu Vcc gemacht? > irgendwas ... ich weis nicht was das Ding gelesen hat ... > Ich steh zur zeit aum schlauch und Komm nicht weiter Solche Fehlerbeschreibungen sind das Herz jeder Fernfehlersuche :) In deiner Stelle würde ich genauso wie in den Beschreibungen vorgehen und die Resultate auf dem Bildschirm mit den Beschreibungen vergleichen. Bei Abweichungen würde ich hier nachfragen und SOLL/IST zeigen.
Danke Stefan das hab ich gesucht :) Ich werde am Wochenende die PDF's durchakkern und ausprobieren Grüße Lukas
Hallo, nach langer Zeit habe ich nun beim Projekt mit dem Programmieren begonnen. Die LCD - Ansteuerung klappt soweit, allerdings ist das ganz kompliziert, und ich muss von grund auf neu Programmiern, nun Habe ich eine Variable gemacht, die die 1te Zeile des Displays speichert, diese setze ich wie folgt zusammen:
1 | int voltage = 1.20; |
2 | int current = 9980; |
3 | int power = 1.35; |
4 | |
5 | char zeile_1[20]; |
6 | char zeile_2; |
7 | |
8 | char zeile_1_temp1[8] = "Strom: "; // Speicher für Strom |
9 | char zeile_1_temp2[9]; // Speicher für Strom wert |
10 | char zeile_1_temp3[2] = "mA "; // Speicher für Strom einheit |
11 | |
12 | ...
|
13 | |
14 | |
15 | sprintf( zeile_1_temp2, "%d", current );// Convertiert alles Mögliche ium siehe: |
16 | //http://www.mikrocontroller.net/articles/FAQ#sprintf.28.29
|
17 | // Tabelle unten!
|
18 | // !!!!!!!!!!FUNKTIONIERT NICHT MIT DER TABELLE WARUM??!!!!!!!!!!!!!!
|
19 | |
20 | |
21 | set_cursor(0,1); //Setzt den Coursor auf die Erste Zeile |
22 | strcpy(zeile_1, zeile_1_temp1);// Setzt den String Zusammen |
23 | strcat(zeile_1, zeile_1_temp2);// aus TEMP1, TEMP2, TEMP3 |
24 | strcat(zeile_1, zeile_1_temp3);// und speichert in zeile_1 |
25 | lcd_string(zeile_1); |
ich möchte später der Variable zeile_1_temp2 einen Double Wert übergeben, leider Klappt das Konvertieren nicht: ... f float, double ...
1 | sprintf( zeile_1_temp2, "%6.3f", current ); |
Auf dem Display wird immer statt dem Wert ein ? angezeigt, dabei ist die variable current auf double umdefiniert. Weiß jemand von euch wie man das hinbiegt? Grüße Lukas
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.