Forum: Mikrocontroller und Digitale Elektronik Input Betrieb funktioniert nicht (attiny 2313)


von Dominik P. (s-line)


Angehängte Dateien:

Lesenswert?

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.

von Markus (Gast)


Lesenswert?

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.)

von MWS (Gast)


Lesenswert?

Altes Beginner-Leiden: Eingänge werden mit PINx abgefragt.

von JaNee (Gast)


Lesenswert?

Moin
Immer wieder gerne www.halvar.at

Mfg

von Thilo G. (thilo_g)


Lesenswert?

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

von Daniel B. (Gast)


Lesenswert?

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

von Dominik P. (s-line)


Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

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.

von Amateur (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.