Portpins ohne Potential?

Gast #90723
Lesenswert?

Hallo,

versuch mal folgendes:
Die DDR-Register (z.B. DDRA für Port A) auf 1 setzten. Damit wird der
Pin als Ausgang konfiguriert. Jetzt kannst du den Pin mit Setzten oder
löschen, indem du das PORT-Register setzt. (z.B. PORTA für Port A)

Gruß, Florian
Gast #90724
Lesenswert?

Hallo Florian,

danke für deine Antwort. In der Simulation werden die Pins gesetzt, nur
direkt am µC kann ich nichts messen. Das "Programm" ist der
Vierzeiler aus dem Tutorial, das DDR wird auf 0xFF gesetzt.

Kann das auch mit irgendwelchen Fuse- oder Lockbits zusammenhängen?


Gruß,
Gerrit
Gast #90726
Lesenswert?

Hier ist es:

******************************************************************
.include "4433def.inc"       ;Definitionsdatei einbinden, ggf. durch
                             ;2333def.inc ersetzen

         ldi r16, 0xFF       ;0xFF ins Arbeitsregister r16 laden
         out DDRB, r16       ;Inhalt von r16 ins IO-Register DDRB


         ldi r16, 0b11111100 ;0b11111100 in r16 laden
         out PORTB, r16      ;r16 ins IO-Register PORTB ausgeben

ende:    rjmp ende           ;Sprung zur Marke "ende"
Endlosschleife
***********************************************************************

Ich weiß allerdings nicht, ob das nun alles so richtig ist. Habe
schonmal ein paar Tage mit dem AVR verbracht, ebenso erfolglos.

Beschreiben und auslesen kann ich ihn - was mich nur verwundert ist,
das die Pins keinen definierten Pegel haben. Kann doch irgendwie nicht
sein, dass ich gegen 5V und auch gegen Masse keinerlei Potential messen
kann, egeal, welchen Port ich verwende.
Die Spannungsversorgung gemäß AVR-Datenblatt stimmt.

Gruß,
Gerrit
Gast #90727
Lesenswert?

Hallo,

Vielleicht ist es das.

Der Controller geht auf die erste Adresse nämlich 0x0000. Wenn dort
nichts ist, dann macht er auch nichts. Du musst ihm sagen, dass er in
Dein Hauptprogramm springen muss.

Das Simulationsprogramm allerdings geht einfach auf den ersten Befehl,
macht also alles ordentlich -- weiss auch nicht?

.CSEG

.ORG  0x00
        rjmp  Init


Init:   ;Stackpointer setzen

       ser temp
       out DDRB,temp

       ;usw
Gast #90729
Lesenswert?

Also ich habs gerade mal ausprobiert. Bei mir funktionierts wunderbar.
Der Controller setzt die Pins B0 u. B1 auf Low und B2-B5 auf High.

@Jens-Erwin:
Das mit dem sprung ins Hauptprogramm kann nicht der Fehler sein, denn
das Programm wird sowieso an die erste Adresse im Speicher geschrieben.
Also dahin, wo du deinen Sprung setzt.

Was evt. noch ein Fehler sein könnte währe, wenn irgendein Interrupt
ausgelöst werden würde. Aber das kann eigentlich nicht vorkommen, da ja
alle interrupts bei einem Reset deaktivert werden.

Gruß, Florian
Gast #90731
Lesenswert?

"Nur...wenn ich gegen Masse und 5V jeweils 0V messe, müsste das ja
schon
ein Kurzschluss sein!?"


Halt mal einen Anschluss vom Messgerät in die Luft, und messe dann nach
Masse und nach +5V. Was siehst du?

IC-Pins können auch den Zustand "hochohmig" haben, also keine
Spannung führen.
Beim AVR machen das alle Portpins nach einem Reset (Eingang ohne
Pull-up).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren