moin schönen guten tag,
i bäuchte hilfe bei nem program für nen netzwerktester.
also die hardwäre habe i so weit vorgeschrieben bekommen :'(.
Gegeben ist das MyAVR MK2 USB mit dem MyAVR LCD Add-On sowie:
9x LED 5MM 12V RT Rote 5mm-LED mit Vorwiderstand
9x 1/4W 220 Kohleschichtwiderstand 1/4W, 5%, 220
1x 74HC 137 3/8 LINE DEC/SPEI+INV.
2x 74AC 00 IC-SCHALTUNG
dies soll in einer switch case funktion laufen. wobei von dem programm
ein grober rohling bereitz existirt.
man soll den tester starten können über taster ein und mit dem 2. taster
noch die möglich keit haben einen fehler zu wählen. wobei es erst ma
wichtig wäre nur zu testen über den ersten taster und halt auf dem
display steht start.
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
4
// Konstantendefinition
5
#define test1 1
6
#define test2 2
7
#define test3 3
8
#define test4 4
9
#define test5 5
10
#define test6 6
11
#define DELAY 7
12
13
// Globale Variablen
14
volatile unsigned int count;
15
int status = test1, delay, next_status, merker = 0;
es ist immer wieder erstaunlich, daß Leute welche programmieren können,
die Syntax (Groß/Kleinschreibung, Grammatik) ihrer Programmiersprache
beherrschen (notgedrungen eher "müsssen"), aber im "richtigen Leben" mit
"menschlicher" Sprache an genau diesen Dingen (Groß/Kleinschreibung,
Grammatik) scheitern ...
> case 1 : PORTB = 0x12;> delay = 250;> next_status = test2;> status = DELAY;> break;
Und welchen Wert hat "Delay"?
Den States sollte man auch sinnvolle Namen geben, wenn man sie an
anderen Stellen auch so schreibt.
>Gegeben ist das MyAVR MK2 USB mit dem MyAVR LCD Add-On sowie:>9x LED 5MM 12V RT Rote 5mm-LED mit Vorwiderstand>9x 1/4W 220 Kohleschichtwiderstand 1/4W, 5%, 220>1x 74HC 137 3/8 LINE DEC/SPEI+INV.>2x 74AC 00 IC-SCHALTUNG
Und den Schaltplan muss man raten?
>es ist immer wieder erstaunlich, daß Leute welche programmieren können,>die Syntax (Groß/Kleinschreibung, Grammatik) ihrer Programmiersprache>beherrschen (notgedrungen eher "müsssen"),
Das "können" solltest du weglassen...
>aber im "richtigen Leben" mit "menschlicher" Sprache an genau diesen >Dingen
(Groß/Kleinschreibung, Grammatik) scheitern ...
ACK!
>die sach lage
Die Schlage ist folgende: Du kannst nicht lesen oder Gelesenes nicht
verstehen und Dich auch auf Aufforderung nicht danach richten. Wieso
sollte Dir jemand Deine Arbeit machen, wo Du dessen Rat doch nicht
befolgen wuerdest?
Gast
i bitte nicht drum das man mir meine arbeit macht bitte nur um hilfe für
den ansatz.
und lesen kann i und wenn i mir net helfen lassen wollte oder rat bitte
würde i so was doch net in nen forum posten
Wenn Du nicht vernuenftiges Deutsch nach den Forenregeln schreibst,
kannst Du Hilfe wohl weitgehend vergessen. Es hat einfach kaum einer
Lust, sich das anzutun. (Zumindest die Leute mit Sachkenntnis.)
Gast
Hier noch einmal, falls Du es jeweils beim Schreiben uebersehen hast:
Wichtige Regeln - erst lesen, dann posten!
* Groß- und Kleinschreibung verwenden
* Längeren Sourcecode nicht im Text einfügen, sondern als
Dateianhang
Bring erst mal dein vorhandenes Programm auf Vordermann.
So was
1
PORTB=0x12
ist der Tod jeglicher vernünftiger Entwicklungsarbeit. Warum 0x12? Warum
nicht 0x13 oder 0x11?
Solche Bitkonstante sind immer Mist.
Drösele das in Bits auf, geben jedem Bit einen Namen entsprechend seiner
Funktion und benutze die Schreibweise (am Beispiel von Leds)
LED_PORT = ( 1<<ERROR_LED ) | ( 1<<SEVERE_FAILURE);
um zb die Fehler LED und die Fatal Fehler LEd am Led Port einzuschalten.
Dann kann man auch aus dem Code erkennen, was eigentlich passieren soll.
Das wäre aus meiner Sicht mal das Wichtigste: Den vorhandenen Code in
eine vernünftige Form zu giessen, damit man auch damit arbeiten kann.
Das was du jetzt hast ist zwar eine Statemachine, aber aus dem Code geht
absolut nicht hervor, was da eigentlich passiert und warum, was die
einzelnen States sein sollen (test ist so ein nichtssagender Name für
<egal was>)
thunderbird schrieb:> So habe es noch mal geändert und als PDF hochgeladen.
Warum als PDF?
Du kannst dein C-File ganz einfach so wie es ist anhängen.
Und eine wirkliche Verbesserung im Stil kann ich immer noch nicht
erkennen, geschweige denn, das irgendein Detail klarer geworden wäre.
OK, die cases haben jetzt Namen anstelle von Zahlen, aber was
beispielsweise bei test5 passiert, ist immer noch im Dunkeln. Liegt
vielleicht auch daran, dass einem die Bezeichnung 'test5' so gut wie
nichts sagt.
Ob du an einen Port 0x37 oder 0b00110111 zuweist, liefert denselben
Informationsgehalt. Von der scheuslichen Formatierung reden wir erst mal
nicht (das musst du doch auch selber gesehen haben, dass deine Zeilen
alle wie Kraut und Rüben verschieden eingerückt sind)
> man soll den tester starten können über taster ein
Welcher Taster?
Wo hängt der?
Was bedeutet: den Tester starten?
> und mit dem 2. taster noch die möglich keit haben einen> fehler zu wählen.
Was bedeutet 'einen Fehler wählen'?
So der Taster liegt an PINB an und tester starten heißt nichts anderes
als das man (Wie bei einem normalen Netzwertester zb für 20EUR)den test
einschalten kann um zu schauen ob alle 8 Leitungen korekt anliegen.
Das mit dem fehler ein bauen ist zunächt einmal egal. erst ma die grund
idea von dem Teil gangbar bekommen.
Lad dir doch mal die kostenlose Version von CadSofts Eagle
(http://www.cadsoft.de/freeware.htm) runter. Damit kannst du (mit
erstaunlich kurzer Einarbeitungszeit) einen schicken Schaltplan
zeichnen. Das hat auch noch den Vorteil, dass du dein Radiergummi
schonst. Und wenn du den dann als *.png hier hoch lädst können den auch
alle wunderbar lesen und verstehen.
Der zweite Punkt: Wenn du die c-Datei etwas schicker formatierst und
hier direkt hoch lädst können wir deinen Quellcode besser auseinander
nehmen.
Das könntest du dann noch toppen, wenn du dir etwas mühe gibst beim
schreiben deiner Beiträge, wenn denn ich einen Satz erst zwei bis drei
mal lesen muss, bis ich verstanden habe, was du damit meinst, macht es
mir (ich denke, ich bin da nicht der Einzige) keinen Spaß sich da durch
zu kämpfen.
Lange Rede, kurzer Sinn, vielleicht machst du mal einen ordentlichen
Stromlaufplan und postest den dann hier und wir schauen dann, wie wir
dir helfen können?
thunderbird schrieb:> würd i gerne geben bekomme den nicht so hin wie ich will.>> Ja klingd scheiße ich weiß.
Tut es wirklich.
Für den Anfang würde es schon ausreichen, wenn daraus ersichtlich ist:
An welchem Pin vom µC hängt was?
Ob da jetzt der letzte Abblockkondensator mit eingezeichnet ist, oder
der 7805, der alles versorgt, oder der Quarz ist erst mal nicht so
wichtig.
Aber eine Aussage: Der Taster liegt am PINB
ist ungefähr so aussagekräftig wie: Das Hofbräuhaus ist in München.
Deswegen finde ich immer noch nicht hin.
Und das eigentlich Traurige ist, dass man dir das alles sagen muss.
Nicht einmal, nicht zweimal, sondern immer wieder.
thunderbird schrieb:> So der Taster liegt an PINB an und tester starten heißt nichts anderes> als das man (Wie bei einem normalen Netzwertester zb für 20EUR)den test> einschalten kann um zu schauen ob alle 8 Leitungen korekt anliegen.
Aua Grundlagen bitte erarbeiten, es gibt keinen PinB sondern nur einen
PortB der seinerseits aus mehreren Pins besteht. Da du aber noch nicht
mal rausgerückt hast welcher Kontroller zum Einsatz kommt gehts hier
halt nicht weiter.....
Das MK2 ist lediglich ein Programmieradapter.
Gruß
einer der es nicht versteht
thunderbird schrieb:> der code is net geklaut
Der Code ist aber auch nicht von dir.
Selbst in der Urfassung passt der Code nicht zu dem Wissen (eigentlich
Nicht-Wissen), dass du in weiterer Folge gezeigt hast.
Dazu passt dann auch
> So der Taster liegt an PINB an
und
Warum wir so pingelig sind?
Du willst in ein bestehendes Programm eine Erweiterung einbauen. Dazu
muss man aber das vorhandene Programm wenigstens in Grundzügen
verstehen. Man fängt da erst mal mit einem Haufen Vermutungen an, die
sich dann immer mehr konkretisieren. Nun ist das aber eigentlich nicht
unsere Aufgabe, diese ganzen Vermutungen auszuräumen.
Für dein Problem mit dem Start Taster gibt es 2 Möglichkeiten:
* die etwas universellere:
Die Tastenabfrage wird mit in die Statemaschine eingebaut. Das kann
Vorteile bringen, wenn noch mehr Tasten zu berücksichtigen sind.
Ausserdem hat man dann eine gute Möglichkeit, die Statemachine aus
jedem beliebigen Zustand in eine saubere Konfiguration zu fahren.
* die banale Lösung:
Die Tastenabfrage kommt in die Hauptschleife. Da deine Statemaschine
nur dann läuft, wenn die Funktion io_states() auch aufgerufen wird,
steuert der Taster einfach nur, ob diese Funktion aufgerufen wird
oder nicht.
Man macht sich eine Variable, die diesen Zustand anzeigt. Am Anfang
ist die auf FALSE und wenn die Taste gedrückt wird, geht die Variable
auf TRUE. Ist die Variable auf TRUE, so wird die Funktion auch
aufgerufen. Gleichzeitig mir dem drücken des Start Tasters wird auch
der State der Statemaschine auf den Startzustand gestellt, damit die
auch von vorne anfängt.
Das ist die Brachiallösung. Nicht sauber, nicht elegant.
Insbesondere würgt diese Lösung einen gerade laufenden Test einfach
mitten drinn ab, ohne sich darum zu kümmern, dass die Statemachine
erst mal in einen gültigen Zustand gefahren werden möchte.
1
unsignedchartestRunning;
2
3
#define START_TASTER PD0
4
5
....
6
7
intmain()
8
{
9
....
10
11
testRunning=0;
12
13
while(1){
14
15
if(!(PIND&(1<<START_TASTER))){
16
status=test1;// mit diesem Zustand geht die Statemachine ins Rennen
17
testRunning=1;// und sie wird eingeschaltet
18
}
19
20
if(count>=2)// Zykluszeit 20ms
21
{
22
count=0;
23
if(testRunning==1)
24
io_states();
25
}
26
}
Das alles ignoriert natürlich jegliches Tastenprellen, aber jemand der
eine Statemachine programmieren kann und die ersten Kapitel im
AVR-GCC-Tutorial durch hat, sollte das vor keinerlei Überraschungen
stellen.
Du musst nicht die Texte vorher umständlich in Variablen erzeugen, um
sie mittels sprintf in wieder andere Arrays möglichst kompliziert
umzukopieren und das Ergebnis dann irgendwann endlich an lcd_puts zu
übergeben.
Persönlich betrachte ich eigentlich Geräte, die einem nach dem
Einschalten mit "Willkommen zu XYZ, Copyright sowieso" begrüssen als
Armutszeugnis des Programmierers. Die Phrase "Willkommen zu" ist
meistens ein deutliches Indiz für einen Einsteigerprogrammierer. Man
kann auch sagen: Das ist meistens so ziemlich das Einzige was sie
fehlerfrei hinkriegen, darum muss es in jedes Programm rein. Und wie man
bei dir sieht, kriegst du noch nicht einmal das vernünftig hin.
Edit:
Das deine 20ms Zykluszeit durch die LCD Ausgabe mitlerweile Makulatur
sind, ist dir anscheinend nicht bewusst bzw. es stört dich nicht
besonders.