Seiten: [1] 2 3
|
 |
|
Autor
|
Thema: Projekt M8 (Gelesen 26004 mal)
|
Ast
Case-Konstrukteur

Karma: +8/-0
Offline
Geschlecht: 
Beiträge: 589

Astpirin, die Medizin deines Lebens
|
Also Leute,
Da ich nun endlich meinen neuen PC habe, kann es mit dem Modden ja los gehen. Und da jeder weiß, dass es die inneren Werte sind die Zählen, will ich mit der Lüftersteuerung anfangen.
Aber ich will keine gewöhnliche Lüftersteuerung! Folgende Punkte sind mir wichtig:
-(relativ) einfacher Aufbau: Damit jeder meine LüSteu auch mit einfachen Mitteln nachbauen kann. (Ich habe selbst keine Werkstat zu Verfügung, also ist das nicht ganz uneigennützig )
-modularer Aufbau: Inspiriert von der LV2 hatte ich an ein System mit Steckkarten gedacht, damit jeder seine Lüsteu nach seinen Bedürfnissen zusammensetzen kann.
-billige gut beschaffbare Teile: Der einfachste Aufbau bringt nichts, wenn die Teile ein Vermögen kosten, oder nur über einen Importeur aus dem fernen Osten zu beschaffen sind.
-digital: Bis jetzt hätte ich auch einfach eine LV2 bauen können, aber, da ich mir sowieso vorgenommen hab mich mit uC's zu beschäftigen, will ich eine digitale Lüftersteuerung auf Basis eines AVRs bauen. Dann kann die Lüftersteuerung auch geich die ansteuerung des LCD übernehmen
Ich habe mir gedacht das ganze auf Basis des AVR Mega 8 zu realisieren, weil es der günstigste Mega ist den es bei Reichelt im DIP-Gehäuse gibt. Dadurch erfülle ich auch die Punkte 1 und 3 
Der Mega 8 hat 23 I/O-Pins, von denen 4 für andere Funktionen drauf gehen. (1xReset, 2xUART, 1xexterner Takt)
Bleiben 19 I/Os mit denen ich 4 4-Bit-breite Anbindungen zu den Steckkarten(folgend ganz unromantisch Slots genannt) und 3 Steuerungs-Taster realisieren will.
Nacher soll man den AVR nur ein Mal programmieren müssen. Dann sagt man dem AVR über den COM-Port, welche Karten in welchen Slots stecken. Der uC lädt dann selbst mit der eindeutigen TreiberID für jeden Slot den richtigen Treiber. (Dies habe ich mit Sprungmarken realisiert)
Jeder Treiber benötigt (bis jetzt) 3 SubRoutinen: -Die Ini-Routine wird beim Starten der LüSteu ein Mal aufgerufen. Sie ist dazu gedacht die Slot-Pins zu konfigurieren (Input/Output, interner Pullup) und Variablen vorzuinitialisieren -Die Loop-Routine wird immer wieder aufgerufen. In ihr soll der Treiber seine eigentliche Aufgabe erfüllen und z.B. die Lüfter regeln. -Die Taster-Routine wird jedesmal aufgerufen, wenn der Treiber den Focus hat(siehe unten) und ein Taster gedrückt wird. Sie ist dazu gedacht, den Treiber während der Laufzeit zu beeinflussen. (z.B. Lüftergeschwindigkeit regeln)
Die Ausgabe auf ein LCD übernimmt ebenfalls eine Steckkarte. Da alle Treiber auf das LCD zugreifen können müssen, befindet sich im "globalen" RAM ein Bereich in dem der aktuelle Anzeigetext abgelegt wird und aus dem der LCD-Treiber dann die Daten ließt, die angezeigt werden sollen.
Damit der uC weiß, wer die Taster-Eingabe verarbeiten soll, gibt es ein Focus Register, das bei keinem Focus den Wert 0xFF und ansonsten die Nummer des Slots mit Focus enthält. Außer der Taster-Verarbeitung regelt das Focus Register auch was auf dem LCD angezeigt werden soll. Also ich habe mir gedacht, dass die Anzeige einfach in den Taster-Routinen der Treiber erledigt wird.
So ich hoffe ich habe nix wichtiges vergessen...
Ob der Nutzen den Aufwand wert ist, will ich garnicht wissen  Der Weg ist das Ziel.
Natürlich würde ich mich über ein paar Tips von den uC-Erfahrenen hier im Forum freuen. Ich progge das ganze in AVR-Studio 4. Dies ist sowohl mein erstes uC-Projekt als auch das erste Mal, dass ich mich mit Assembler beschäftige. Ich springe sozusagen ins kalte Wasser, also seit ein bisschen nachsichtig 
Ich werde gleich mal den Quelltext bis wohin ich bis jetzt gekommen bin hochladen, damit ihr euch den mal angucken könnt.
Bis jetzt ist das noch alles theoretisch. Die Simulationen laufen ohne Probleme, aber ich glaube ohne Hardware komm ich nicht mehr viel weiter.
Ich werde demnächst mal bei Reichelt bestellen. Nur damit ich nix vergesse: Ich brauche... 1x AVR Mega8 1x Quarzoszillator 1x MAX 232 1x Com-Buchse 3x Taster Lochraster-Platten Buchsenleisten Steckerleisten IC-Sockel ein paar Transistoren ein paar Widerstände für LEDs Litze gewinkelte Stiftleisten für die Befestigung der Karten Stabilisierte 5V Versorgungsspannung für den Tesataufbau
Ich hoffe ich hab nix vergessen. Naja sagt mal was ihr bis jetzt davon haltet.
Edit: Hier und hier ist der Quelltext
|
|
« Letzte Änderung: April 20, 2005, 18:26:12 von Ast »
|
Gespeichert
|
There are only 10 types of people in the world: Those who understand binary, and those who don't. -------- How many people can read hex if only you and dead people can read hex?
|
|
|
Ast
Case-Konstrukteur

Karma: +8/-0
Offline
Geschlecht: 
Beiträge: 589

Astpirin, die Medizin deines Lebens
|
So, heute sind die Bauteile von Reichelt angekommen (Montag bestellt, Mittwoch in den Händen: TOP).
Leider haben sie mir wohl das falsche D-SUB-Kabel geschickt, aber das brauch ich im Moment eh noch nicht.
Jetzt kann gelötet werden 
Vielleicht sollte man sich direkt auf einen Modding-FAQ Standard einigen was uC betrifft: Gibt es irgendwelche Vorschläge, wie der ISP-Programmer-Stecker aussehen soll? Also ich wollte den mit ner Stifleiste realisieren (die ist billig und im Rastermaß 2,54 ohne Probleme zu verarbeiten). Jetzt stellt sich nur die Frage der Pinbelegung. Evtl. sollt man die auch so wählen, dass man nicht gleich den uC zerstört, wenn man den Stecker falschherum einsteckt. Zu verteilen währen da V+, Gnd, Rst, Miso und Mosi. Hat da jemand ne Idee, oder gibt es da ne Verteilung, die sich bewährt hat, oder soll ich die einfach frei Schnauze verteilen. Ist ja auch kein Problem, das nacher wieder umzulöten.
[gelöscht durch Administrator]
|
|
|
Gespeichert
|
There are only 10 types of people in the world: Those who understand binary, and those who don't. -------- How many people can read hex if only you and dead people can read hex?
|
|
|
b0nze
Gast
|
Nettes Projekt, mal schaun, was draus wird.
Hab da aber noch Anregungen: Für das Tastererfassen und entprellen würde ich das hier in einen Timer setzen: http://www.mikrocontroller.net...-20549.html#new Vielleicht ist es besser, mit einem m32 zu arbeiten, der hat schöne 32Pins. Zähle z.B. noch einen Pin dazu, damit du einen Quarz nehmen kannst. Warum so nen teuren Oszillator. Dann vielleicht TWI (I2C) Temperatursensoren, die wollen auch 2 Pins. Dann ein paar LEDs (Effekte, Bestätigung), da kann das doch knapp werden. Wie das mit den IDs geht, hmm.. werden die ins EEprom gespeichert? Sonst vielleicht nen Menü, wo man das zur Laufzeit ändern kann.
==> Ich schick dir mir mal mein Lüftersteuerungchen... ist recht modular aufgebaut und hat nen schönes, allgemein gültiges, Menü. Ich bin nie dazu gekommen das fertigzustellen. Vielleicht kannste was brauchen und vielleicht hab ich irgendwann Lust dazu. Bis jetzt ist integriert: PWM Ausgabe der Spannungen in 20Stufen (könnte geändert werden) Umdrehungen erfassen bis glaub 10.000U/min bei 8Mhz (oder so) Alles für 4 Kanäle ausgelegt, könnte sicher erweitert werden 4 Tasten Bedienung (UP/DOWN/ENTER/BACK) Am besten natürlich 4x?? Display DS1621 Temperatursensoren sind so halb integriert Automatisches Verändern der eingestellten Stufe mit einem Sollwert in der Temperatur (ist Temp zu hoch, geht die Stufe mit einstellbarer Zeit immer höher, zu niedrig (mit Hysterese natürlich) langsam wieder runter. Dürfte sich sicher mal einpendeln, habs net getestet) Ontime Anzeige Passwortschutz Ausgabe der Daten per UART mehr fällt mir grad nich ein *G*.
b0nze
|
|
|
Gespeichert
|
|
|
|
Falzo
Diktator vom Dienst
Administrator

Karma: +15/-0
Offline
Geschlecht: 
Beiträge: 5088
|
was den standard fuer das prommer-kabel angeht, vielleicht schliesst du dich da nochma mit spunky kurz? der hat imho irgendwo schonmal was dazu gemacht oder entworfen oder so, wenn ichs nicht in falscher erinnerung habe...
haettest du Lust ein Tutorial schreiben und dies nur den µC-grundlagen und vor allem der herstellung jenes Kabels sowie der Definition besagten Standards zu widmen? das waer riesig, auf sowas draenge ich schon lange und du haettest ja direkte gelegenheit ordentlich fotos zu machen etc.
ich wuerde dich dafuer jedenfalls lieben
|
|
|
Gespeichert
|
|
|
|
Ast
Case-Konstrukteur

Karma: +8/-0
Offline
Geschlecht: 
Beiträge: 589

Astpirin, die Medizin deines Lebens
|
Also ich dokumentiere meine Arbeite auf jeden Fall, alllerdings glaube ich, dass die Fotos nicht unbedingt Tutorial-Qualität haben...
Schreiben kann ich sicherlich tun, aber das ist jetzt erstmal ein Prototyp und wie gesagt mein erstes uC-Projekt, also werd ich das erst machen wenn's fertig is. Fotos kann dan ja vieleicht jemand anderes machen.
@b0nze: Ich werd mir deinen Code mal anschauen, wenn ich Inspiration brauche, aber im Moment stehen erstmal mehr oder weniger stupide Lötaufgaben vor mir. Und was den Mega32 betrifft: Der kostet bei Reichelt 5 bis 6 Euro und ich wollte ja eine möglichst Low-Cost LüSteu bauen (naja so Low-Cost wie halt geht...) Wenn ich damit fertig bin, könnte man ja über einen Nachfolger nachdenken 
Ich wollte eigentlich ein paar Fotos von meinem neuen Programmer hochladen, aber meine Cam ist überhaupt nicht für Nahaufnahmen geeignet... Naja, ist vieleicht auch besser, wenn ihr den nicht seht. Die Lötbrücken sehen furchtbar aus...
Was solls, ich werd mal mit spunky Kontakt aufnehemen. Und dann frisch ans Werk!
|
|
|
Gespeichert
|
There are only 10 types of people in the world: Those who understand binary, and those who don't. -------- How many people can read hex if only you and dead people can read hex?
|
|
|
|
|
|
|
|
b0nze
Gast
|
Den Oszi hätteste dir sparen können. Der m8 läuft auch bei dir (da du ja nicht programmieren kannst) noch mit internem 1Mhz.
Probier mal das "Yaap" aus. Das hab ich, könnte er zwar mal weitermachen...aber funktioniert.
Ich würde eher mal deinen ISP überprüfen.. ich hab auch 3-4Tage gebraucht, Miniatur-Quetsch-Bauweise bei mir .
Brauchst nix Pulldown etc. Na vielleicht Pullup am RESET.
b0nze
|
|
|
Gespeichert
|
|
|
|
|
Ast
Case-Konstrukteur

Karma: +8/-0
Offline
Geschlecht: 
Beiträge: 589

Astpirin, die Medizin deines Lebens
|
So dann mach doch mal nen Doppelpost, denn ich habe ein kleines Problem:
Hier und hier habt ihr den aktuellen Quellcode.
Ich möchte eigentlich nur bei jedem Hauptschleifendurchlauf einen festen Wert über den UART schicken.
Empfangen tu ich das ganze über das Terminal Programm von Rowalt.de
Auch die Verdrahtung ist wie auf rowalt.de, außer dass ich RX und TX vertauscht habe, weil ich kein Nullmodemkabel, sondern 1:1 Kabel benutze.
Jetzt empfange ich aber leider nicht den Wert, den ich im Code angebe!
;UART Initialisieren ;Baudrate einstellen ldi temp1, LOW(UBRRVAL) out UBRRL, temp1 ldi temp1, HIGH(UBRRVAL) out UBRRH, temp1 ;Frame-Format: 8 Bit ldi temp1, (1<<URSEL)|(3<<UCSZ0) out UCSRC, temp1 ;RX und TX aktivieren ldi temp1, (1<<RXEN)|(1<<TXEN) out UCSRB,Temp1
;Serielle Schnittstelle abfragen ldi Fin,0x0F rcall SendChar
SendChar: sbis UCSRA,UDRE rjmp SendChar out UDR, Fin ret
Was mach ich falsch?
Und um zu zeigen, dass es im Großen und Ganzen eigentlich ganz gut läuft hab ich hier auch noch zwei bilder vom Aufbau:
[gelöscht durch Administrator]
|
|
« Letzte Änderung: Mai 1, 2005, 20:08:04 von Ast »
|
Gespeichert
|
There are only 10 types of people in the world: Those who understand binary, and those who don't. -------- How many people can read hex if only you and dead people can read hex?
|
|
|
b0nze
Gast
|
Mein Zimmer ist ja aufgeräumt im Gegensatz zu deinem Code (so schlimm siehts hier eigenlich garnich aus.. bis auf die Klamotten überall).
Wie wärs, wenn du mal ne Schleife irgendwo reinmachst? Z.B. am Anfang, wo du aus dem EEprom die Treiber lädst.. kann man schön und einfach mit LD temp1, Z+ ST X+, temp1 machen. Also allgemein versuchen, eine Schleife zu erzeugen, das is ja grauenhaft *G*, wirste später merken, alles was man vereinfachen kann (auch wenns 5% Takte mehr kostet) ist GUT.
Für nen gescheites Terminalprogramm: http://realterm.sourceforge.net/ (thx to Olaf, my redda)
Ich wüsste nicht, was da jetzt falsch sein könnte bei dem Serial... nimm doch einfach mal "ldi fin, 'x'", dann siehste mit jedem Programm, dass was kommt. 15 ist nämlich ASCII Steuercode, mögen nicht alle... und Tipp, Yaap ist bei seinem Serial Terminal etwas lahm, also, wenn du volle Pulle ohne Delay sendest.. gute Nacht *G*.
Also resumé: mach den Code noch etwas leserlicher, und ich freu mich auf das weitere.
b0nze
PS. Haddu kein ICQ?
|
|
|
Gespeichert
|
|
|
|
Ast
Case-Konstrukteur

Karma: +8/-0
Offline
Geschlecht: 
Beiträge: 589

Astpirin, die Medizin deines Lebens
|
Also ich habs mal mit dem anderen Terminalprogramm versucht, aber da ist auch keine Besserung in Sicht.
Wenn ich den Port schließe und dann wieder öffne, kommen manchmal andere Signale an. Heißt das, ich hab ein Problem mit den Einstellungen des UARTs? So wie der Code momentan ist müsste ich doch eigentlich eine Baudrate von 9600, 8 Bits, keine Parität, und ein Stopbit haben, oder?
Achja: UBBRVAL berechne ich 16000000/(16*9600) - 1
Irgendwie fuchst mich das jetzt...
Zum Spaghetticode:  Ist mein erster ASM-Code und optimiert wird später. Aber keine Angst: Sobald der UART funktioniert, werd ich den Code ein bisschen übersichtlicher machen.
|
|
|
Gespeichert
|
There are only 10 types of people in the world: Those who understand binary, and those who don't. -------- How many people can read hex if only you and dead people can read hex?
|
|
|
Seiten: [1] 2 3
|
|
|
|
|