MOIN MOIN, Hallo alle zusammen ich bräuchte ma BITTE Hilfe. Ich bin nicht all zuerfahren bei der Programmierung von Controllern obwohl ich Elektroniker gelernt habe. Traurig aber wahr :-D Einige kleine "LED blink , blink " Programme laufen ganz gut aber sobald ich einen Input betreiben möchte fangen die Problemme an. Ich möchte gern einen attiny 2313 programmieren unter Bascom, eigendlich ganz einfach aber es läuft nicht. Ich fang mal von vorne an. Ich benutze folgende Hardware/Software: - DIAMEX - AVR USB STICK (STK500 Protokoll) - BASCOM - AVR , demo Version - normales Steckbrett (kein spezieles Evaluationsboard) Bitte seht Euch jetzt den Screenshot "BASCOM Hilfe" im Anhang an. Wie Ihr ersehen könnt möchte ich gern mit einem Schalter an Pinb.4 eine LED an Pind.6 zum leuchten bringen, und ja ich weiß es ist blödsinn aber mir geht es erst mal darum Erfahrungen zu sammeln. (siehe Schaltplan) Da ich mit dieser Schaltung schon ein paar Blinkschaltungen programmiert habe gehe ich mal davon aus das die Verbindung zwischen Computer und Chip einwandfrei funktioniert. Nun endlich zu meinen Problem: Der Input funktioniert nicht , wenn ich einen Input gebe passiert gar nix auch über mehrere Minuten nicht. Habe auch schon die umgekehrte Logik probiert wenn Schalter = 0 , LED an Aber auch hier funktioniert der INPUT nicht. D.h. Der Chip ignoriert den Input. Was mache ich da falsch? Ich hoffe dass ich das Problem verständlich erklärt habe und BITTE Euch um Unterstützung. VIELEN DANK. Mit freundlichen Grüßen PS: Noch frohes Restweihnachten.
Bascom kenne ich nicht. Aber an den Eingang des Taster an PB4, muss ein Pulldown-Widerstand (z.B. 10K) angeschossen werden damit ein Low-Pegel erkannt wird. Oder, die üblichere Methode, der Taster schaltet nach GND und der interne Pull-Up Widerstand wird eingschalten. (Oder ein exteren Pull-Widerstand verwenden.)
Altes Beginner-Leiden: Eingänge werden mit PINx abgefragt.
Hallo Dominik, die Fuse-Bits und das Programm sind auf den ersten Blick i.O., aber der Anschluss des Schalters dürfte der Grund sein. Wenn du PB4 als Input deklarierst, wird dort intern der Pull-Up-Widerstand aktiviert und zieht den auf +5V. Schalter ein oder aus ändert daran nichts, wenn du den Pin von aussen auch auf +5V legst - der Schalter muss den mit Gnd verbinden, um einen Signalwechsel zu erreichen. Ich würde dem sicherheitshalber noch einen 1k-Widerstand in Reihe spendieren, damit der PB4 auch überlebt, wenn er mal versehentlich als Ausgang definiert wird und von aussen gerade der entgegengesetzte Pegel anliegt. Grüße Thilo
In Bascom werden Inputs mit PINx abgefragt. Bei dir wäre das dann:
1 | If PINB.4 = 1 Then |
2 | PORTD.6 = 1 |
3 | Else |
4 | PORTD.6 = 0 |
5 | End If |
Ich bins wieder , also ich muss ja sagen Ihr seit ja echt schnell. So habe es jetzt gerade noch mal ausprobiert mit pin Abfrage und Schalter über GND mit 1kohm Widerstand. ES FUNKTIONIERT :-) Vielen Dank. Aber eine Frage habe ich noch, wenn man einen Wait Befehl programmiert z.B. waitms 500, warum stimmt diese Zeit nie mit richtigen Zeit der Chip hat doch einen internen Quarz mit Taktgenerator, somit müsste er doch selber wissen wann die Zeit um ist oder? Oder habe ich da einen Denkfehler?
Dominik P. schrieb: > Aber eine Frage habe ich noch, wenn man einen Wait Befehl programmiert > z.B. waitms 500, warum stimmt diese Zeit nie mit richtigen Zeit Weil du BASCOM nicht mitgeteilt hast, wie schnell der µC tatsächlich getaktet wird > der Chip > hat doch einen internen Quarz Nö. Der Chip hat einen internen Schwingkreis. Aber das ist kein Quarz. > mit Taktgenerator, somit müsste er doch > selber wissen wann die Zeit um ist oder? Auch das weiß er nicht. BASCOM setzt dein waitms um in "Drehe 200-tausend mal Däumchen". Dazu muss der BASCOM Compiler wissen, wie schnell der µC getaktet ist. Denn mit diesem Wissen, 'weiß' der Compiler dann wie lange 1 mal Däumchen drehen dauert. Auszurechnen, wie oft dann für eine bestimmte Zeit Däumchen gedreht werden muss, ist dann eine leichte Übung. Aber alles steht und fällt damit, dass du BASCOM die korrekte Taktgeschwindigkeit des µC angibst. Der µC selber hat keine Vorstellung davon, was eine µs oder eine ms ist. Der arbeitet einfach nur einen Befehl nach dem anderen ab. Und das in einer Taktgeschwindigkeit, die ihm durch den Taktgenerator aufs Auge gedrückt wird.
Auch wenn ich mich nicht mit Basic auskenne, so gehe ich mal davon aus, dass am Anfang der einfachen "Blinkbeispiele" eine Zeile in der Art: $crystal = 8000000 eingefügt war. Natürlich nur, wenn auch delay verwendet wurde. Schmeiß einfach mal 'ne Pupille in die Dokumentation.
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.