Hallo, ich bin ein Neuling was AVR-Programmierung angeht. Ich möchte einen Kabeltester bauen. Er soll folgendermaßen funktionieren. 10 Leitungen teste mit einem Taster.Das eine Ende der Leitungen am Atmega dran.Am ende der Leitungen sind LED's zur verdeutlichung. Ich benötige 10 Ausgänge die nacheinander geschaltet werden. D.h. einmal tasten erstes kabel (Ausgang 1 aktiv), nochmal tasten zweites kabel (nur 2. Ausgang aktiv),....und am ende alle Kabel testen. Die Kabel am besten noch einlesen und bei Fehler eine LED aktivieren. nach 5 Minuten ohne Taste sleepmodus. Hat jemand sowas ähnliches schon gemacht, bzw. kann mir kurz schreiben wie ich das am günstigsten programmieren kann. Danke
Wenn du eh schon "das andere Ende" des Kabels identifizerit hast,. dann ist es sinnvoller, da einen passenden Abschlsusstecker dran zu stecken. Unter Zuhilfenahme der Einspeisung "an einem ende" kannst du nun de Belegung und Funktion ebenfalls an diesem >ende ermitteln. Andernfalls müßtest du immer von einem zum anderen Ende des Kabels rennen, um festzustellen was wo los ist.
dumbo27 schrieb: > Hallo, ich bin ein Neuling was AVR-Programmierung angeht. > Hat jemand sowas ähnliches schon gemacht, bzw. kann mir kurz schreiben > wie ich das am günstigsten programmieren kann. Indem du von der Pieke auf programmieren lernst. Stell dir das 'Kabel' als nicht existent vor. Dann bleibt von deiner Aufgabenstellung übrig: An einem µC sind 10 LED angeschlossen, die auf Tastendruck aufleuchten sollen. Bis auf den Teil mit dem einzelnen Tastendruck, ist das so ziemlich die 2.te oder 3.te Einsteigerübung. Gleich nach "eine LED soll leuchten" und "eine LED soll blinken" und noch bevor "und jetzt bauen wir uns ein Knight Rider Lauflicht" AVR-Tutorial AVR-GCC-Tutorial
Danke für eure Antworten. ich frag mich aber wie ich die LED nacheinander per Tastendruck aufleuchten lassen kann. Muss ich da nen Zähler mit einbauen der bei jedem Tastendruck eins hochzählt und dann bei der jeweiligen Zählerzahl die jeweilige LED leuchtet? Oder gibts da einfachere möglichkeiten. ich programmiere mit bascom. Vielleicht hat da von euch schon mal jemand sowas programmiert.
dumbo27 schrieb: > Danke für eure Antworten. > ich frag mich aber wie ich die LED nacheinander per Tastendruck > aufleuchten lassen kann. Denk dir was aus > Muss ich da nen Zähler mit einbauen der bei jedem Tastendruck eins > hochzählt und dann bei der jeweiligen Zählerzahl die jeweilige LED > leuchtet? > Oder gibts da einfachere möglichkeiten. Einfachheit liegt auch im Auge des Betrachters. Im Zweifelsfall ist die 'einfachste' Möglichkeit diejenige, die du realisieren kannst > ich programmiere mit bascom. Vielleicht hat da von euch schon mal jemand > sowas programmiert. Du drehst und windest dich, anstelle das du einfach mal ein bischen was ausprobierst und so selber lernst. Hinweis: In einem Computer spielt sich alles binär ab. Lauter 0 und 1 Wenn du ein paar Led an einem Port hast, dann hast du am Port 8 Bit (8 LED) die entsprechenden Binärzahlen sehen so aus 00000000 (dezimal 0) 00000001 (dezimal 1) 00000010 (dezimal 2) 00000011 (dezimal 3) 00000100 (dezimal 4) 00000101 (dezimal 5) 00000110 (dezimal 6) 00000111 (dezimal 7) 00001000 (dezimal 8) .... Wenn du jetzt mal die Zahlen herausgreifst, bei denen genau ein 1 auftuacht, dann sind das nacheinander 1, 2, 4, 8 (und die Reihe würde weitergehen mit 16, 32, 64, 128) Fällt dir was auf? Jede Zahl ist genau das doppelte der vorhergehenden Zahl Dies liegt daran, dass wir im Binärsystem arbeiten. Oder anders ausgedrückt: um an der Position i eine 1 zu erzeugen, gibt man die Zahl 2 hoch i aus Noch ein Hinweis: Auf einem µC gibt es normalerweise auch 'Schiebebefehle'. Damit wird das Bitmuster einer Zahl zb. einfach 1 Stelle nach links geschoben. Aus dem Bitmuster 00001000 (=dezimal 8) wird so das Bitmuster 00010000 (=dezimal 16) Noch ein Hinweis, der in eine andere Richtung führt: Du möchtest in deinem BASCOM Handbuch, bzw. BASCOM Tutorial auch einmal über Arrays (zu deutsch 'Felder') nachlesen. Es gibt unendlich viele Möglichkeiten, wie du so ein 'Lauflicht', welches mit einer Taste weiter geschoben wird, realisieren kannst. Denk dir was aus, implementiere es, sieh nach ob deine Idee funktioniert. Auf der Ebene, auf der du zur Zeit arbeitest, ist das momentan für dich eine gute Möglichkeit um zu lernen. Gleich nachdem du Tutorials/Bücher/Hilfe gelesen hast. (Sorry: Aber weiter lehn ich mich nicht aus dem Fenster. LED gezielt zum Leuchten zu bringen, ist eine einfache Übung. DU willst ein Gerät bauen. Also musst DU auch die Grundlagen lernen. Und einen Portpin auf 0 oder 1 zu setzen, je nach Umgebungsbedingen, das ist nun mal das kleine Ein mal Eins der µC-Programmierung.)
ja ich weiss schon. Led bring ich ja schon zum leuchten und ein lauflicht kann ich auch schon programmieren. ich möcht ja auch kein fertiges programm. das Problem ist ja das ich mit jedem tastendruck eine LED weiter (aber nur diese) zum leuchten bekommen möchte und am Ende sollen alle leuchten. Deshalb denk ich ja das es mit einem zähler am einfachsten wäre. Drum möcht ich ja fragen ob es da noch einfachere möglichkeiten gibt. mit einem schieberegister kann ich am ende ja nicht alle leuchten lassen.
dumbo27 schrieb: > ja ich weiss schon. Led bring ich ja schon zum leuchten und ein > lauflicht kann ich auch schon programmieren. ich möcht ja auch kein > fertiges programm. Wenn Du ein Lauflicht programmieren kannst, wo liegt denn dann das Problem? Du hast 10 LEDs? Dann definier Dir doch eine 16Bit-Variable und schiebe in einer Schleife immer ein 1-Bit eine Stelle nach links. Dann leuchten alle nacheinander. Und beim Zählerstand 11 (oder 10, je nachdem ob zu bei 0 oder 1 anfängst zu zählen) setzt Du dann alle Bits. Mit BASCOM kenn ich mich nicht aus, aber das wird ähnlich wie hier http://www.mikrocontroller.net/articles/Bitmanipulation beschrieben funktionieren.
Also hier mal mein erster versuch. funktioniert leider noch nicht. könnt ihr mir da helfen $regfile "m8def.dat" $crystal = 1000000 Config Portd = Input Config Portb = Output Dim B As Integer Do B = 0 Do If Pind.2 = 1 Then B + 1 If B = 0 Then Ddrb = 10000000 If B = 1 Then Ddrb = 01000000 If B = 2 Then Ddrb = 00100000 If B = 3 Then Ddrb = 00100000 If B = 4 Then Ddrb = 00010000 If B = 5 Then Ddrb = 00001000 If B = 6 Then Ddrb = 00000100 If B = 7 Then Ddrb = 00000010 If B = 8 Then Ddrb = 00000001 If B = 9 Then Ddrb = 11111111 if B = 10 then B = 0 Loop Loop
Du gibst Werte mit PORTB=... an PORTB aus.Das DDRB, setzt Du am Anfang deines Programms auf 0xFF, damit werden alle Pins als Ausgänge definiert. Danach änderst Du DDRB nicht mehr.
Und lass mal die äußere Do..Loop-Schleife weg.Was soll die denn bringen. Du könntest außerdem Probleme bekommen, wenn Du deinen Taster nicht enptrellst. Infos dazu im Tutorial: http://www.mikrocontroller.net/articles/AVR-Tutorial:_Tasten
Dumbo27 schrieb: > If B = 2 Then Ddrb = 00100000 > If B = 3 Then Ddrb = 00100000 00100000 hast Du doppelt
hallo, also hier mein programm. leider funktioniert es noch nicht. auch wenn ich den taster entprelle. kann mir jemand sagen wo der Fehler liegt. $regfile "m8def.dat" $crystal = 1000000 Config Portd = Input Config Portb = Output Dim B As Integer Portd = 255 B = 0 Do If Pind.2 = 0 Then B = B + 1 If B = 0 Then Portb = &B00000000 If B = 1 Then Portb = &B10101010 If B = 2 Then Portb = &B11111111 If B = 3 Then B = 1 Loop
Ich hab keinen Plan von BASCOM, aber wird dein Code ohne errors und warnings kompiliert? bei dem BASCOM-Code hier http://www.windred.dk/avr/timer-pwm-counter/default.htm wird jede if-Abfrage mit endif abgeschlossen. Außerdem wird das Ende des Hauptprogramms mit end abgeschlossen. Wie hast Du den Taster angeschlossen? Wenn Du "If Pind.2 = 0" als Abfrage verwendest musst du einen Pullup-Widerstand von VCC nach Pind.2 und den Taster zw. Pind.2 und GND anschließen. http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen Wo ist die Entprellung? Poste mal den kompletten Code.
Hallo! If Then in einer Zeile geht. Timingproblem. Taster gedrückt und zählt hoch wie irre. So schnell kommst Du nicht zum Denken bist Du über 3 hinaus. MfG
Nachtschichtler schrieb: > So schnell kommst Du nicht zum Denken bist Du über 3 hinaus. Blödsinn! Die Nacht dauert einfach schon zu lange. MfG
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.