www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega8 Resetpin oder RxD/TxD


Autor: Profitroll (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Servus,

ist es möglich den Resetpin (PC6) als Ausgang zu benutzen, aber seine 
Resetfunktion trotzdem zu behalten? Alternativ würde auch noch Port D 
gehen, wenn dadurch aber UART nicht gestört werden kann.

µC: ATmega8
Benutzt werden: 1 ganzer Port (wahrscheinlich B) und von einem anderen 
Port 7 Pins. Da würde sich natürlich Port C perfekt eignen, da er genau 
7 Pins hat. Allerdings ist einer davon eben der Resetpin.

Ich vermute, dass ich ihn nicht benutzen kann.

Dann bliebe noch Port D. Da sind aber die beiden Pins für RxD und TxD. 
Hätte ich nichts einzuwenden, wenn UART ständig verfügbar sein kann, 
obwohl die Pins (oder zumindest einer) benutzt werden.

Die dritte Möglichkeit was sicher geht, ist einfach einen Pin vom 
anderen Port benutzen. Z.B. PD6 statt PC6. Möchte ich persönlich nur 
machen, wenns gar nicht anders geht, da es einigen zusätzlichen 
Programmieraufwand mit sich bringt.

Was wie geschalten werden soll, kommt über UART in den EEPROM und wird 
von dort ausgelesen und durchlaufen.

Welche Lösung ist also die Beste?

Autor: oldmax (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi
Warum so kompliziert? Natürlich kannst du mischen. In Assembler ist das 
vielleicht ein Aufwand von 4 -8 Zeilen. Wenn du dir ein kleines UP für 
die Ausgabe schreibst, dann kannst du dieser Routine ein Byte übergeben. 
In der Routine trennst du es wie gewünscht auf. Ich sehe da kein 
Problem. Ich denke aber, du hälst dich daran fest, einfach immer ein 
Byte ausgeben zu müssen, weil's schöner ist. Mittlerweile richten sich 
die Programmierer mehr nach dem (einfacheren ) Layout.
Ich halt es auch so. Ein Aufruf
Read_Port
 liefert mir bspw. ein Byte Read_In und die Folge
LDS Set_Out, Register
Write_Port 
setzt die Portpins der verschiedenen Ports. Wenn die Routinen zum Lesen 
noch am Anfang der Loop-Schleife des Hauptprogrammes stehen und die 
Zuweisungsroutine am Ende aufgerufen wird, hat man eine saubere 
Struktur.
Gruß oldmax

Autor: S. T. (cmdrkeen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der resetpin ist ziemlich wichtig für die serielle programmierung ... 
wenn du deinen µC HV-parallelprogrammieren kannst, kannst du auch den 
reset sowie serielle programmierung abschalten und den resetpin als IO 
benutzen ... (ich bin mir nur nicht ganz sich ob es nicht noch spezielle 
regelungen in der benutzun des pins dann geben)

es hatte mich aber auch oft gestört nie einen kompletten 8bit PORT auf 
dem ATmega8 benutzen zu können... da gewöhnt man sich drann ... eine 
ausgabefunktion die einem dann das sendebyte bitweise auf die 
ausgangsbits verteilt schafft abhilfe...
Problem: erhöter Speicherbedarf, erhöter Prozessorzeitaufwand

Autor: Profitroll (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich denke aber, du hälst dich daran fest, einfach immer ein
>Byte ausgeben zu müssen, weil's schöner ist.
Nein. Es wird sowieso jeder Pin extra geschalten, es geht mir da 
eigentlich nur im die einfachere Zuordnung.

>der resetpin ist ziemlich wichtig für die serielle programmierung ...
Genau das ist der Grund warum ich frage, ob die Resetfunktion trotz 
Benutzung noch funktionsfähig bleibt. Aber wie es scheint, geht es wohl 
nicht.

Über UART sende ich eine Ziffer die dann für den betreffenden Pin steht.
Bsp: PORTB |= (1 << empfangene_ziffer); // (vereinfacht)

Dann werde ich aber vermutlich eine Abfrage für Pin 6 einbauen. Ist ja 
nicht viel Aufwand mehr, mir ging es nur um das mögliche mit dem 
Resetpin. Lieber fragen, bevor man am Ende ISP nicht mehr geht.

Thx euch.

Autor: oldmax (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi
Profitroll schrieb:
>Nein. Es wird sowieso jeder Pin extra geschalten, es geht mir da
>eigentlich nur im die einfachere Zuordnung.

Einfachere Zuordnug für's Programmoder Layout? Anhand meiner Frage 
erkennst du, das "einfacher" relativ ist. In Programm kannst du so 
einfach bleiben wie du magst, lediglich das Unterprogramm, welches nun 
deine Bits auf die Ausgänge verteilt, muß die Zuordnung machen. Auch die 
Eingänge können so verstreut liegen, wie sie wollen, innerhalb des 
Programmes hast du sie in einem Byte, eben durch eine entsprechende 
Routine.
In Assembler kann ichs erklären:
Mein_Ausgangsbyte:    . Byte ; Bit 0 = Port C 2
                             ; Bit 1 = Port C 3
                             ; Bit 2 = Port B 5
                             ; Bit 3 etc.
Mein_Eingangsbyte:    . Byte ; Bit 0 = Port B 2
                             ; Bit 1 = Port B 3
                             ; Bit 2 = Port D 0
                             ; Bit 3 etc.
in einem Unterprogramm sammelst du nun die Portbits ein und setzt die 
entsprechenden Bits in Mein_Eingangsbyte. Diese Routine rufst du am 
Anfang deiner Programmschleife auf. Anschließend arbeitest du nur mit 
der Variablen.
Das selbe gilt für die Ausgänge. Das Unterprogramm zerlegt die Variable 
Mein_Ausgangsbyte und setzt die entsprechenden Portbits. Dieses UP rufst 
du am ende deiner Programmschleife auf. Innerhalb deines Programmes 
arbeitest du nur mit der Varialen. Nun ist das Layout "einfach" und das 
Programm " einfach ".
Gruß oldmax
Gruß oldmax

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie willst Du denn eine 0 ausgeben oder einlesen, solange der Resetpin 
seine Funktion als Reset behält?  Ohne PSI kommst Du da nicht weiter, 0 
V sind nunmal 0 V.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.