Forum: Compiler & IDEs attiny85 1Mhz Arduino virtuell Serial Protokoll beenden


von DAVID B. (bastler-david)


Lesenswert?

Hallo
Ich habe mich Leider bei der Controller Auswahl verzockt und brauche 
genau einen Pin mehr :-(

Lange rede Kutzer sinn,
Ist es Möglich Software seitigt Tx und Pin als LED Ausgang unter einen 
Hut (pin) zubekommen ?

Wenn ja wie kann man so was angehen?
Das starten ist ja einfach mit zb mySerial.begin(2400);
Aber wie Beende ich das wieder Um den Pin Als LED Ausgang zu nuten ?

Oder kann ich einfach beides laufen lassen?

Vielen dank.

von Jörg B. (jbernau)


Lesenswert?

DAVID -. schrieb:
> Ich habe mich Leider bei der Controller Auswahl verzockt und brauche
> genau einen Pin mehr :-(

Dann entwickle doch auf einem Arduino und nimm als LED pin den Reset-Pin 
;-)

Wenn Du das Teil nochmals umflashen willst, dann per HVP. Das 
funktioniert sogar ohne die LED auszulöten, wenn Du den Vorwiderstand 
auf12V auslegst

VG

Jörg

: Bearbeitet durch User
von DAVID B. (bastler-david)


Lesenswert?

Danke Dir!
Die Möglichkeit zum HV flashen habe ich Leider noch nicht.
Was aber ein Größeres Problem ist So Weit ich Weiß und Testen konnte ist 
es nicht Möglich den Reset für Irgendwas zu Nutzen.

Jedenfalls habe ichs noch nie geschafft.

Sonst würde ich darüber die Spannung messen und hätte den Freien Pin.

PS(Neugierde mode an)
Wie oft könnte man den Chip mit Hv Löschen ohne ihn kaputt zubekommen 
2-3 mal ?

: Bearbeitet durch User
von Einer K. (Gast)


Lesenswert?

DAVID -. schrieb:
> Jedenfalls habe ichs noch nie geschafft.

Mit Bootloader kein Problem.
Siehe Digispark - Micronucleus

DAVID -. schrieb:
> PS(Neugierde mode an)
> Wie oft könnte man den Chip mit Hv Löschen ohne ihn kaputt zubekommen
> 2-3 mal ?
Keine Einschränkungen laut DB.
Also sicherlich über 10000 mal

Übrigens nicht nur löschen, sondern auch beschreiben unter 12V Einfluss.

von DAVID B. (bastler-david)


Lesenswert?

Und mit Micronucleus kann ich dann den Reset als normalen 
Eingang/Ausgang über die arduino IDE nutzen ?

Ok werde ich mir die Tage mal genauer an sehen.

Ich würde dennoch Erstmal Gucken wollen wie Weit ich mit Seriell und LED 
Out auf einen Pin komme.

Was mit 12 Volt Beschreiben Angeht das glaube ich nicht so ganz.
Mein letzer Atmega ist bei 12 Volt sofort gestoben.

von Einer K. (Gast)


Lesenswert?

DAVID -. schrieb:
> Was mit 12 Volt Beschreiben Angeht das glaube ich nicht so ganz.
> Mein letzer Atmega ist bei 12 Volt sofort gestoben.

Nur der Reset Pin verträgt 12V.

Andere Pins?
Sofort tot!

von Peter D. (peda)


Lesenswert?

Der ATtin58 hat keine UART, d.h. der Pin bleibt IO-Pin. Sobald das 
Senden beendet ist, kannst Du den Pin ganz normal setzen oder löschen. 
Beim Senden flackert die LED mit.

Der Resetpin läßt sich als Tasteneingang benutzén. Zieht man ihn von 5V 
auf 4,5V runter, wird noch kein Reset ausgelöst. Diese Spannungsänderung 
läßt sich aber mit dem ADC messen. Du brauchst also neben der Taste noch 
2 Widerstände als Spannungsteiler, z.B. 10k + 1k.

von Oliver S. (oliverso)


Lesenswert?

Peter D. schrieb:
> Der ATtin58 hat keine UART, d.h. der Pin bleibt IO-Pin. Sobald das
> Senden beendet ist, kannst Du den Pin ganz normal setzen oder löschen.

Das könnte allerdings die UART-Gegenseite verwirren.

Oliver

von DAVID B. (bastler-david)


Lesenswert?

Ok Super ich Danke euch!
Werde die Ideen mal Testen.

Und das die LED mit flackert (egal) es wird nur der Akkuzustand + 
Laufzeit übertragen.

von DAVID B. (bastler-david)


Lesenswert?

Ok also nicht.
Eine Übertragung ohne quartz nur intern mit 8 oder 16 MHz ist nicht 
sauber aufzubauen.
Ob mit LED oder den Pin(PB2/und zum test PB1) nur für seriell anleine 
ist egal.
Auch von 2400-9600 getestet alles egal.
Das höchste was ich hinbekommen habe von 4 Zeichen waren schon mal 3 :-)
Sonst nur Datenmüll.

22⸮
⸮26
2⸮⸮⸮⸮2⸮3
⸮⸮⸮⸮⸮⸮⸮
22⸮
2⸮5⸮
⸮23
)⸮
⸮⸮3
⸮224⸮
2⸮⸮
⸮24⸮⸮223

Ok also doch ein andren einbauen mist.

Denoch danke ich euch.

von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

DAVID -. schrieb:
> Eine Übertragung ohne quartz nur intern mit 8 oder 16 MHz ist nicht
> sauber aufzubauen.

Für Bastlerzwecke ist die Genauigkeit durchaus brauchbar. Man kann sich 
auch ein Testprogramm schreiben, um das OSCCAL genauer abzugleichen. Das 
war aber bei mir bisher nicht nötig.

DAVID -. schrieb:
> Auch von 2400-9600 getestet alles egal.

Ja, der prozentuale Fehler ist unabhängig von der Baudrate.
Bei hohen Baudraten kann noch der Fehler hinzukommen, daß der 
Baudratenteiler nur ganzzahlig (F_CPU / 16 / n) teilen kann. Aber den 
hat der ATtiny58 ja nicht.

DAVID -. schrieb:
> Das höchste was ich hinbekommen habe von 4 Zeichen waren schon mal 3 :-)

Das deutet eher auf einen Fehler in Deiner SW-UART hin.

Anbei mal ein einfacher SW-Sender.
Mit 2 Stop-Bits kann sich der Empfänger besser synchronisieren.

Kann aber auch sein, daß Du das OSCCAL beim Flashen versehentlich 
überschrieben hast, d.h. die Werkseinstellung ist weg.

: Bearbeitet durch User
von DAVID B. (bastler-david)


Lesenswert?

Vielen dank PETER für dein Code und infos.
Mal sehen ob ich daraus was entnehmen und anpassen kann.
Sieht mir sehr nach AVR Studio aus.
Ich bin mir sicher ob woll du mehr fach atiny58 schreibst das du 
attiny85 meinst :-)

Die Taktfrequenz ist leider maximal 8 Mhz da die Spannung zwischen 
3,6-4,2 Volt schwanken wird (Akku).
Mein gestriger test zeigt mir aber schon das es selbst mit sauberen 5 
Volt nicht gehen mag.

von Tom (Gast)


Lesenswert?

DAVID -. schrieb:
> Auch von 2400-9600 getestet alles egal.
Das stimmt was nicht.

Ich habe auf einem ATmega169 mit internem Oszillator stabile Übertragung 
19600 bps hinbekommen.
Beim Starten lief eine Kalibrierroutine, die den internen Oszillator 
mittels OSCCAL und einem externen Uhrenquarz (32,768 kHz) auf 
Wunschfrequenz getunt hat.

von Peter D. (peda)


Lesenswert?

Du kannst ja mal mit _delay_ms(1000) eine LED togglen und dann mit einer 
Stoppuhr prüfen, ob die interne Frequenz stimmt.

von Oliver S. (oliverso)


Lesenswert?

Tom schrieb:
> Ich habe auf einem ATmega169 mit internem Oszillator stabile Übertragung
> 19600 bps hinbekommen.
> Beim Starten lief eine Kalibrierroutine, die den internen Oszillator
> mittels OSCCAL und einem externen Uhrenquarz (32,768 kHz) auf
> Wunschfrequenz getunt hat.

Was natürlich gepfuscht ist. Mit Quarz kanns jeder.

Oliver

von Tom (Gast)


Lesenswert?

Oliver S. schrieb:
> Was natürlich gepfuscht ist. Mit Quarz kanns jeder.
Jein. Man kann auch permanent ein 'U' (=0x55) schicken, mit dem Oszi die 
Bitzeit messen und das Tuning manuell machen.

Oder umgekehrt: Man wartet auf ein <Enter> vom Host und vermisst dessen 
Bitzeiten.

von DAVID B. (bastler-david)


Lesenswert?

Um das mal zu ende zubringen.
Auch die Tipps von von Peter haben nix geändert.
Egal ob 8 oder 16 MHz es wird nur müll gesendet.
(Bei 16 MHz konnte man ab und zu Daten ohne Fehler finden)
Und eine funktionierende ssd1306 OLED Library konnte ich auch nicht 
auftreiben.
So mit ist das Thema endgültig erledigt und ich muss zur Atmega Reihe 
Wechseln.

Vielleicht kann ich wenigstens dazu beitragen das es andere nicht erst 
testen müssen und viel zeit verschwenden.

Ich danke euch für eine zahlreichen Infos.

von DAVID B. (bastler-david)


Lesenswert?

DAVID -. schrieb:
> Und eine funktionierende ssd1306 OLED Library konnte ich auch nicht
> auftreiben.

OK Das war Woll mal GARNIX. (Grade durch Zufall Gemerkt)
Eine Passende Library wäre zb SSD1306_minimal.
Problem an der Sache ist aber Sie scheint sich nicht mit andren SSD1306 
Librarys zu vertragen. (Muss man erstmal Trauf kommen) Steht nur 
Nirgends!

https://www.instructables.com/id/ATTiny85-connects-to-I2C-OLED-display-Great-Things/

von DAVID B. (bastler-david)


Angehängte Dateien:

Lesenswert?

Ok Zusammen Gefast ich Glaube mein USB Zu UART Converter ist nicht so 
Empfindlich wie ein HC-10 BT Modul.

Jeden Falls Geht es bei mir Mit USB Nicht aber mit BT SEHT Komisch aber 
für meine Anwendung sogar noch besser.

Und TFT Geht auch auf Einmal hmm.(library Konflikt)

Naja Hier mal beide Code Vorlagen welche bei MIR laufen mit 8MHz Intern 
3,6-4,2 Volt.

BT. (Senden Geht! Empfangen nicht Getestet)

#include <SoftwareSerial.h>

SoftwareSerial mySerial(PB2, PB0); // RX, TX

void setup()
{
  mySerial.begin(9600);
}

void loop()
{
  delay(1000);
  mySerial.println("Hello, world?");
}

Und TFT

#include "SSD1306_minimal.h"
#include <avr/pgmspace.h>
SSD1306_Mini oled;

void setup() {
  oled.init(0x3c);
  delay(500);
  oled.startScreen();
  oled.clear();
}

void loop() {
  oled.cursorTo(0, 0);
  oled.printString("TEST");
}

Und Wenn ich Später nur Mir Selber Helfe war es Schon nicht um Sonst :-)

von c-hater (Gast)


Lesenswert?

DAVID -. schrieb:

> ich muss zur Atmega Reihe Wechseln.
[...]
> Vielleicht kann ich wenigstens dazu beitragen das es andere nicht erst
> testen müssen und viel zeit verschwenden.

Tsss...

Weil du krass unfähig bist, sollen andere sich daran ein Beispiel 
nehmen?

Also:

1) Ein Mega alleine löst dein Problem in keinster Weise. Auch der 
braucht
   einen Quarz, um die Bitrate für eine UART aus dem Stand verlässlich
   hinreichend genau hinzubekommen.
2) Du hättest auch auf einen Tiny mit mehr Pins ausweichen und an den 
halt
   einfach einen Quarz dran bauen können.
3) Kalibrierung ist immer eine Möglichkeit, um auch ohne Quarz UART-
   Kommunikation möglich zu machen.

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.