Forum: Mikrocontroller und Digitale Elektronik Bascom: Mega16:mehrere Pins schalten nicht auf high


von Florian Stäudle (Gast)


Lesenswert?

Mit nachfolgenden Code möchte ich 4 Pins (PD7,PC0,PC1,PC2) ansteuern. 
Allerdings macht der PC2 nicht mit. Am Ausgang liegen dauernd 1.09 V an. 
In der Simulation stimmen die Portwerte. Wo liegt der Fehler? Kein 
Unterschied in verschiedenen Platinen und mit verschiedenen µC. Die 
Platinen habe ich selbst gefertigt.


'Schrittmotoransteuerung atmega16
'
$regfile = "m16def.dat"
$crystal = 4915200
$baud = 1200

Dim A As Integer
Declare Sub Linksdrehung
Declare Sub Rechtsdrehung
Dim C As Integer
Dim Eingang As Integer
Dim W As Integer
Dim V As Integer
Dim Richtung As Integer
Dim Sensor1 As Integer
Dim Sensor2 As Integer

Config Serialout = Buffered , Size = 30
Config Portc = &B11111111
Config Portd = &B10000100
Config Pinc.2 = 1

                                  'legt die Richtung der Pins fest: 0 
für Eingang 1 für Ausgang, links deen höchsten Pin, rechts den 
niedrigsten

Set Portd.3                                                 'PullUp von 
Pin PD3 aktivieren, zieht PD3 sauber
Set Portd.4                                                 'auf 5V, Mit 
Taster dann auf 0V herunterziehen (für input).
Set Portd.5
Set Portd.6

C = 500                                                     'wartezeit 
zwischen einzelschritt der schrittmotorumdrehung
Richtung = 0

'eingabe der drehgeschwindigkeit über tastatur
Do
W = Ischarwaiting()                                         'gibt eine 1 
aus, wenn über V24 ein Signal kommt

If W = 1 Then
V = Inkey()
Print V
C = Asc(v)                                                  'formt ein 
ASCII_Zeichen in eine Zahl um
End If

'Fahrtrichtung festlegen

Sensor1 = Pind.5
Sensor2 = Pind.6

Set Portd.2                                                 'LED ein
If Richtung = 0 Then
If Sensor1 = 0 Then Richtung = 1
End If

If Richtung = 1 Then
If Sensor2 = 0 Then Richtung = 0
End If



Print Richtung
Print Sensor1
Print Sensor2

'Signale für Fahrtrichtung generiern
If Richtung = 0 Then Gosub Linksdrehung
If Richtung = 1 Then Gosub Rechtsdrehung

Loop

Rechtsdrehung:

Set Portc.3
Waitms C
Reset Portd.7
Waitms C
Set Portc.1
Waitms C
Reset Portc.3
Reset Portd.2                                               'LED aus
Waitms 500
Set Portc.0
Waitms C
Reset Portc.1
Waitms C
Set Portd.7
Waitms C
Reset Portc.0
Waitms C

Print C

Return

Linksdrehung:

Set Portd.7
Waitms C
Reset Portc.2
Waitms C
Set Portc.0
Waitms C
Reset Portd.7
Reset
Portd.2                                               'LED aus
Waitms C
Set Portc.1
Waitms C
Reset Portc.0
Waitms C
Set Portc.2
Waitms C
Reset Portc.1
Waitms C

Print C

Return

von thkaiser (Gast)


Lesenswert?

Schonmal den Port auf einer Experimentierplatine getestet? Vielleicht 
ist ja ein Fehler im Layout.
Ich würde den Controller nur minimal beschalten und mit einem 
Minimal-Programm testen, um Hardware-Fehler auszuschließen.

von Florian Stäudle (Gast)


Lesenswert?

Gleiches Problem auf Steckplatine. Habe nochmals einen neuen µC 
verwendet, hilft auch nicht.

Kurzer Code hilft auch nicht.

'Schrittmotoransteuerung atmega16
'
$regfile = "m16def.dat"
$crystal = 1000000                                          '4915200
$baud = 1200


Dim C As Integer


Config Portc = &B11111111
'Config Portd = &B10000100
'Config Pinc.2 = 1



C = 500                                                     'wartezeit 
zwischen einzelschritt der schrittmotorumdrehung

Do

Set Portc.2
Waitms C
Reset Portc.2
Waitms C

Loop

von mikki merten (Gast)


Lesenswert?

Hast du das JTAG Interface disabled. Dieses ist im Auslieferungszustand 
enabled und verhindert die normale Nutzung PC2-PC5

von A. Arndt (Gast)


Lesenswert?

Hi Mikki,

dieser Tip war echt GOLDWERT, hat mir auch weitergeholfen, da komm'
mal drauf....

Gruss
A. Arndt

von Jo Wollbeck (Gast)


Lesenswert?

Hallo Mikki,

ebenfalls TAUSEND DANK für diesen Hinweis!!!

Beste Grüße,
Jo

von Horst (Gast)


Lesenswert?

wie aktiviert oder deak. man das JTAG Interface.

von Ratber (Gast)


Lesenswert?

Bei den Fudebits.

Wenn du den Internene Programmer nutzt dann mal Manuell öffnen und
schau auf "Fusebits High"

"Fusebit H" auf Disabled setzen und mit "Write FSH" schreiben.

Fertig.

Bei Externem Programmer in die Anleitung schauen wo man die Fuses
ändert.

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.