INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
UNO /ATtiny4313 Zeiten unterschiedlich
03.01.2020, 15:27 (Dieser Beitrag wurde zuletzt bearbeitet: 03.01.2020 15:28 von Tommy56.)
Beitrag #9
RE: UNO /ATtiny4313 Zeiten unterschiedlich
(03.01.2020 14:38)AnjinSan schrieb:  Benötigt werden (jetzt noch im Testmodus) die Zeiten wie programmiert.
Das Ganze wird die ,von mir schon vor meiner Zwangspause begonnende Pendelzugsteuerung über eine Y-Strecke mit Weiche.
Wäre da eine Steuerung in Abhängigkeit der Posotion nicht sinnvoller?

Ausgangspunkt: A -> Mitte-Nord, B -> Mitte-Süd
Stopp am Ende von jeweils Mitte, diese Position für beide erfassen
wenn beide da, Weichen umschalten, evtl. warten, weiter fahren

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.01.2020, 15:35
Beitrag #10
RE: UNO /ATtiny4313 Zeiten unterschiedlich
(03.01.2020 15:27)Tommy56 schrieb:  
(03.01.2020 14:38)AnjinSan schrieb:  Benötigt werden (jetzt noch im Testmodus) die Zeiten wie programmiert.
Das Ganze wird die ,von mir schon vor meiner Zwangspause begonnende Pendelzugsteuerung über eine Y-Strecke mit Weiche.
Wäre da eine Steuerung in Abhängigkeit der Posotion nicht sinnvoller?

Ausgangspunkt: A -> Mitte-Nord, B -> Mitte-Süd
Stopp am Ende von jeweils Mitte, diese Position für beide erfassen
wenn beide da, Weichen umschalten, evtl. warten, weiter fahren

Gruß Tommy
Hallo Tommy56,
die Positionen werden mittels Hallsensoren erfasst. diese starten dann ebven die Aufenthaltszeit und die richtige Weichenposition. Im derzeitigen Testbetrieb (Steckbrett) funzt das wunderbar. fas Ganze wurde dann auf den 4313 übertragen, mit eben jenen (jetzt glücklicherweise) bereinigten Fehler.

bin jetzt nicht daheim, stell aber in den nächsten Tagen mal den Sketch ein, damit du eine Idee vom Ablauf bekommst.
Möglicherweise gibts ja noch ein paar Verbesserungen zu besprechen.
lieben Gruß aus dem ZAR (Zentrum für ambulante Reha).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.01.2020, 16:58
Beitrag #11
RE: UNO /ATtiny4313 Zeiten unterschiedlich
Hallo AnjinSan,

Sorry, wenn ich da jetzt mit einem Fragenkatalog komme, aber:
Verwendest du die Arduino IDE?
Wenn ja, hast du beim ersten Compilieren/Hochladen "den bootloader gebrannt"?

Kurz im Zusammenhang was ich meine beziehungsweise welchen Fehler ich gemacht habe:
(Fast?) alle Delay-Funktionen im Attiny Microcore benutzen einfach nur eine bestimmte Anzahl an Operations um eine bestimmte Zeit abzusitzen.
Wenn ich die Frequenz ändere ohne den Bootloader zu brennen, dann taktet der Attiny noch in der "alten" Frequenz, der Compiler meint aber der Attiny benutzt die "neue" Frequenz und der Attiny wartet deshalb zu viele Schritte. Brenne ich den Bootloader, werden auch die Fuse-Bits gesetzt und es stimmt wieder.
Es ist ein bisschen etwas Anderes, wenn ich eine andere Entwicklungsumgebung verwende.

Das würde erklären, warum dein Attiny "auf 8 MHz gestellt" länger braucht als wenn er "auf 1 MHz gestellt" ist. Das war irgendwie nicht intuitiv.
Tatsächlich waren alle meine 2313 und 4313 auf 1 MHz im Auslieferungszustand.

In der heutigen Zeit ist gesunder Menschenverstand so etwas Ähnliches wie eine Superkraft - aber keine nützliche.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.01.2020, 15:12
Beitrag #12
RE: UNO /ATtiny4313 Zeiten unterschiedlich
Hallo zusammen, Danke für die Geduld und Warten auf eine antwort.
Zwischenzeitlich habe ich den Sketch auf einen MEGA übertragen, da ich noch für die Zukunft ein Paar Pins mehr benötigen werde.
Und es ist noch eine LCD Fernanzeige dazugekommen.

Hier erstmal den derzeitigen (rundlaufenden) Sketch:
Code:
/*Pendelzugsteuerung
Funktion: Y-Strecke im Pendelbetrieb.
Aktuell: Hin- und Rückfahrt A-B/ B-A | A-C/ C-A
(A) Gleis 31: Auszuggleis
(B) Gleis 32: Versand    
(C) Gleis 33: Lagerhaus/ Lagerschuppen
Nach Ankunft: Abwarten der Wartezeit.
Wartezeit wird evtl. verändert.
Standort des Zuges wird über Hallsensoren ermittelt.
Fernanzeige der aktuellen Situation über LCD.
Geplante Erweitungen: automatisches Entkuppeln von Waggon mittels Servo.

Version V4.2
aktuelle Fassung für Arduino MEGA
HSQ1 -HSQ3= Hallsensoren TLE 4905L
LCD: Joy-it SBC 20x4
Status_x dient der Verfolgung der einzelnen Schritte
**** Credits: Tommy56  Hilfe bei der Zeitverzögerung****
*/
//***** LCD Daten*****************
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
//***** Konstanzen Zuordnung der Hallsensoren*****
const int HSQ1 = 2;
const int HSQ2 = 3;
const int HSQ3 = 4;
boolean ausgeloest1 = false;
boolean ausgeloest2 = false;
boolean ausgeloest3 = false;
//*************** Einschaltverzögerung *******
const uint32_t Wartezeit_1 = 5000; // xx sec. warten bevor Einschaltung
const uint32_t Ein_1 = 5000;       // xx sec. Einschaltdauer
uint32_t Startzeit_1,Einzeit_1;    //

const uint32_t Wartezeit_2 = 5000; // xx sec. warten bevor Einschaltung
const uint32_t Ein_2 = 5000;       // xx sec. Einschaltdauer
uint32_t Startzeit_2,Einzeit_2;    //

const uint32_t Wartezeit_3 = 5000; // xx sec. warten bevor Einschaltung
const uint32_t Ein_3 = 5000;       // xx sec. Einschaltdauer
uint32_t Startzeit_3,Einzeit_3;    //
//***** Konstanten Zuordnung der Ansteuerung Relais*****
const int Relais_Gleis_31 = 5;
const int Relais_Gleis_32= 6;
const int Relais_Gleis_33 = 7;
const int Relais_Weiche_Abz1 = 8;
const int Relais_Weiche_Ger1 = 9;
const int Relais_Fahrstrom_Hin = 10;
const int Relais_Fahrstrom_Rueck = 11;
const int Relais_Freigabe= 12;
const int Relais_Weiche_Ger2= 13;
const int Relais_Weiche_Abz2 = 54;
const int Relais_Herzstueck = 55;
//***** Testanzeigen Ausloesung HSQxx
const int Relais_HSQ1 = 56; // LED zur Kontrolle der Auslösung
const int Relais_HSQ2 = 57; // LED zur Kontrolle der Auslösung
const int Relais_HSQ3 = 58; // LED zur Kontrolle der Auslösung
//***** Variablen der Startzeiten*****
unsigned long Startzeit1 =0;
unsigned long Startzeit2 =0;
unsigned long Startzeit3 =0;
//************************************

//*****Beginn Setup Bereich***********
void setup()
{
Serial.begin(9600);
//***** LCD Initalisierung************
lcd.init();
lcd.backlight();
//*****Pin Modus Input Hallsensoren/ Taster******
pinMode(HSQ1,INPUT);   // Pin 2
pinMode(HSQ2,INPUT);   // Pin 3
pinMode(HSQ3,INPUT);   // Pin 4
//*****Pin Modus Output Relais ************
pinMode (Relais_Gleis_31,OUTPUT); //Pin  
pinMode (Relais_Gleis_32,OUTPUT); //Pin  
pinMode (Relais_Gleis_33,OUTPUT); //Pin  
pinMode(Relais_Weiche_Abz1,OUTPUT); // Pin
pinMode(Relais_Weiche_Ger1,OUTPUT); // Pin
pinMode(Relais_Fahrstrom_Hin,OUTPUT);  // Pin
pinMode(Relais_Fahrstrom_Rueck,OUTPUT);   // Pin
pinMode(Relais_Freigabe,OUTPUT);      // Pin
pinMode(Relais_Weiche_Ger2, OUTPUT); // Pin
pinMode(Relais_Weiche_Abz2,OUTPUT); // Pin
pinMode (Relais_Herzstueck,OUTPUT); // Pin
//***** Testanzeigen Ausloesung HSQxx
pinMode(Relais_HSQ1,OUTPUT); // Pin
pinMode(Relais_HSQ2,OUTPUT); // Pin
pinMode(Relais_HSQ3,OUTPUT); // Pin
//***********************************
}
//*****Ende Setup Bereich*****

//*****Beginn Loop Bereich*****    
void loop()
{
static uint8_t status1 = 0;
uint32_t aktuelle_Millis = millis();
//*****Abfrage Hallsensor HSQ1**********
//*****Fahrt A von Auszuggleis nach Versand*******
Serial.println(status1);
if ((digitalRead(HSQ1)==LOW)&& (ausgeloest1==false)&&(status1==0))
{
  ausgeloest1= true;
//***** LCD Textausgabe ******************
lcd.clear();
lcd.setCursor(0,0); // Cursorpos 0, Zeile 1
lcd.print(F("HSQ 1 ausgeloest"));
lcd.setCursor(0,1); // Cursorpos 0, Zeile 1
lcd.print(F("Fahrt A Richtung"));
lcd.setCursor(0,2);
lcd.print(F("Versand"));    
//*****Abschalten *****definierten Zustand herstellen  
  digitalWrite(Relais_Freigabe,LOW);
  digitalWrite(Relais_Fahrstrom_Hin,LOW);
  digitalWrite(Relais_Fahrstrom_Rueck,LOW);
  digitalWrite(Relais_Herzstueck,LOW);
  digitalWrite(Relais_Gleis_31,LOW);
  digitalWrite(Relais_Gleis_32,LOW);
  digitalWrite(Relais_Gleis_33,LOW);
  digitalWrite(Relais_HSQ1,HIGH);
  digitalWrite(Relais_Weiche_Abz2,LOW);
   ausgeloest2= false;  
   ausgeloest3= false;
//*****vorbereiten Abfahrt*****
  digitalWrite(Relais_Weiche_Ger1,HIGH);
  digitalWrite(Relais_Fahrstrom_Hin,HIGH);
  digitalWrite(Relais_Gleis_31,HIGH);
  digitalWrite(Relais_Gleis_32,HIGH);
  Startzeit1=millis();
}
else if (millis()-Startzeit1>=2000)
  {
   digitalWrite(Relais_HSQ1,LOW);
   digitalWrite(Relais_Weiche_Ger1,LOW);        
  }
if (status1 == 0 && !digitalRead(HSQ1))
{
  Startzeit_1=aktuelle_Millis;
  status1 = 1;
}
if (status1 == 1 && aktuelle_Millis - Startzeit_1 >= Wartezeit_1)
{
   Einzeit_1 = aktuelle_Millis;
   digitalWrite(Relais_Freigabe,HIGH);
//***********
status1 = 2;
}
//*****Abfrage Hallsensor HSQ2**********
//*****Ankunft B*****    
//*****Abschalten Rückfahrt*****definierten Zustand herstellen  
if ((digitalRead(HSQ2)==LOW)&& (ausgeloest2==false)&&(status1==2))
{
  ausgeloest2= true;
lcd.clear();
lcd.setCursor(0,0); // Cursorpos 0, Zeile 1
lcd.print(F("HSQ 2 ausgeloest"));
lcd.setCursor(0,1); // Cursorpos 0, Zeile 1
lcd.print(F("Fahrt B Richtung"));
lcd.setCursor(0,2);
lcd.print(F("Auszuggleis"));          
  digitalWrite(Relais_Freigabe,LOW);
  digitalWrite(Relais_Fahrstrom_Hin,LOW);
  status1 = 3;
}
//*****Rückfahrt ******
//*****Fahrt B von Versand nach Auszuggleis*****
if (status1==3)
{
  digitalWrite(Relais_HSQ2,HIGH);
  digitalWrite(Relais_Fahrstrom_Rueck,HIGH);
  digitalWrite(Relais_Weiche_Ger2,HIGH);
  Startzeit2=millis();  
}
else if (millis()-Startzeit2>=2000)
{
  digitalWrite(Relais_HSQ2,LOW);
  digitalWrite(Relais_Weiche_Ger2,LOW);
}
if (status1 == 3 && !digitalRead(HSQ2))
{
  Startzeit_2=aktuelle_Millis;
  status1 = 4;
}
if (status1 == 4 && aktuelle_Millis - Startzeit_2 >= Wartezeit_2)
{
  Einzeit_2 = aktuelle_Millis;
  digitalWrite(Relais_Freigabe,HIGH);
  ausgeloest1=false;
  status1 = 5;
}
//*****Hier geht die Post Richtung Lagerschuppen ab*****
//***** Ankunft Auszuggleis
//***** Fahrt C
if ((digitalRead(HSQ1)==LOW)&& (ausgeloest1==false)&&(status1==5))
{
  ausgeloest1= true;
lcd.clear();
lcd.setCursor(0,0); // Cursorpos 0, Zeile 1
lcd.print(F("HSQ 1 ausgeloest"));
lcd.setCursor(0,1); // Cursorpos 0, Zeile 1
lcd.print(F("Fahrt C Richtung"));
lcd.setCursor(0,2);
lcd.print(F("Lagerschuppen"));    
//*****Abschalten Rückfahrt*****definierten Zustand herstellen  
  digitalWrite(Relais_Freigabe,LOW);
  digitalWrite(Relais_Fahrstrom_Rueck,LOW);
  digitalWrite(Relais_Gleis_31,LOW);
  digitalWrite(Relais_Gleis_32,LOW);
  digitalWrite(Relais_HSQ1,HIGH);
  ausgeloest2= false;
//*****vorbereiten Abfahrt*****
  digitalWrite(Relais_Weiche_Abz1,HIGH);
  digitalWrite(Relais_Fahrstrom_Hin,HIGH);
  digitalWrite(Relais_Gleis_31,HIGH);
  digitalWrite(Relais_Gleis_33,HIGH);
  digitalWrite(Relais_Herzstueck,HIGH);
  Startzeit1=millis();
}
else if (millis()-Startzeit1>=2000)
  {
   digitalWrite(Relais_HSQ1,LOW);
   digitalWrite(Relais_Weiche_Abz1,LOW);        
  }
if (status1 == 5 && !digitalRead(HSQ1))
{
  Startzeit_3=aktuelle_Millis;
  status1 = 6;
}
if (status1 == 6 && aktuelle_Millis - Startzeit_3 >= Wartezeit_3)
{
   Einzeit_3 = aktuelle_Millis;
   digitalWrite(Relais_Freigabe,HIGH);
   ausgeloest1=false;
   status1 = 7;
}
//*****Abfrage Hallsensoren HSQ3**********
//*****Ankunft Lagerschuppen*****
//*****Abschalten Rückfahrt*****definierten Zustand herstellen  
if ((digitalRead(HSQ3)==LOW)&& (ausgeloest3==false)&&(status1==7))
{
  ausgeloest3= true;
lcd.clear();
lcd.setCursor(0,0); // Cursorpos 0, Zeile 1
lcd.print(F("HSQ 3 ausgeloest"));
lcd.setCursor(0,1); // Cursorpos 0, Zeile 1
lcd.print(F("Fahrt D Richtung"));
lcd.setCursor(0,2);
lcd.print(F("Auszuggleis"));          
  digitalWrite(Relais_Freigabe,LOW);
  digitalWrite(Relais_Fahrstrom_Hin,LOW);
  status1 = 8;
}  
//*****Rückfahrt ******
//*****Fahrt D von Lagerschuppen nach Auszuggleis*****
if ((status1==8)&&(ausgeloest3=true))
{
  digitalWrite(Relais_HSQ3,HIGH);
  digitalWrite(Relais_Fahrstrom_Rueck,HIGH);
  digitalWrite(Relais_Weiche_Abz2,HIGH);
  Startzeit3=millis();  
}
else if (millis()-Startzeit3>=2000)
{                                                                
  digitalWrite(Relais_HSQ3,LOW);
  digitalWrite(Relais_Weiche_Abz2,LOW);
}
if (status1 == 8 && !digitalRead(HSQ3))
{
  Startzeit_3=aktuelle_Millis;
  status1 = 9;
}
if (status1 == 9 && aktuelle_Millis - Startzeit_3 >= Wartezeit_3)
{
  Einzeit_3 = aktuelle_Millis;
  digitalWrite(Relais_Freigabe,HIGH);
  ausgeloest1=false;
  status1 = 0;
}
}// Ende Loop

Noch sind für mich einige Komentare drin, allein schon weil ich immer wieder länger unterbrechen muss. Da ist es mit den
Reindenken einfach einfacher...

Auf dem MEGA sind die Zeiten top, keine (großen) Abweichungen. Bin mal gespannt, wenn ich den Sketch dann
auf einen 2560 übertragen.

@Vapalus:
wahrscheinlich war der chip schon mal programmiert, habe ich einfach so aus der Box geholt.
Deine Erfahrungen und Tipps werde ich mir auf alle Fälle merken. Danke dafür.
Mit Wünschen für ein schönes Wochenende
wbr. AnjinSan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.01.2020, 15:23
Beitrag #13
RE: UNO /ATtiny4313 Zeiten unterschiedlich
Was für einen MEGA hast Du, wenn Du es erst noch auf den 2560 übertragen willst?

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.01.2020, 15:45
Beitrag #14
RE: UNO /ATtiny4313 Zeiten unterschiedlich
(10.01.2020 15:23)Tommy56 schrieb:  Was für einen MEGA hast Du, wenn Du es erst noch auf den 2560 übertragen willst?

Gruß Tommy

Ah, falsch ausgedrückt.
jetzt im Testmodus benutze ich einen Arduino 2560 MEGA Nachbau aus Fernost.
Wenn es dann soweit ist, kommt der Sketch auf einen ATMEGA2560 Chip.
Mit Glück werde ich noch vor Weihnachten 2020 fertig Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Digitaler und analoger Temperatursensor unterschiedlich Pit 3 2.693 16.01.2016 19:05
Letzter Beitrag: Pit
Information Analog-Comparator für AtTiny4313 marcel_001 3 2.508 29.10.2014 22:07
Letzter Beitrag: Corvus

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste