RTC DS1307 Problem

Phantomias2006

Mitglied
10. Jan. 2010
56
0
6
Sprachen
Hallo liebes Forum

Wie im anderen Thread schon angekündigt hab ich Aktuell ein kleines Problem mit meinen DS1307


Derzeit Kämpfe ich leider mit meinen DS1307 und mit dem DCF77
Beides nach Markus seinen Schaltplan angeschlossen.
DS1307 läuft aber öfters Springt die Uhr und das Datum sporradisch mit wirren
Zahlen.
DCF77 hab ich in der Software nicht implementiert!Nur die DS1307 Routine.

Also dachte ich mir ich stecke mal meinen DCF77 wieder ab da ich ihn für mein Aktuelles Projekt eh nicht brauche.

Und jetzt kommts!Wenn ich den DCF77 abstecke Zeigt mein Display nur mehr @5.@5.@5
@5:mad:5:mad:5
an. Die Uhr Intern im DS1307 läuft aber weiter! Bleibt nicht stehen
Wennich den DCF77 wieder anstecke dann läuft die Ihr entweder weiter oder Zeigt wieder wirre Zeichen an

Aber wie gesagt sobald der Ausgesteckt ist hab ich immer @5

Batterie hab ich eingelegt (Hat 3,2V) und der DS1307 wird mit 5Volt vom 7805
Versorgt

eventuell weiß einer von euch an was das liegen könnte zumal vom DCF77 kein bisschen Code vorhanden ist.

mfg und Vielen Dank
 
Hallo !

Spontan hätte ich gesagt.... es handelt sich um einen "Massefehler" (GND-Verbindung irgendwo wackelig). ;)


Ich bekomme da jetzt sonst keinen Reim drauf und mir fehlen auch gerade mal wieder die Eigenschaften vom anderen Thread.... :rolleyes:

Kannst du deshalb deinen derzeitigen vollständigen Code hier mal einstellen?

Benutze dazu bitte die Code-Funktion, um dein Programmcode auch hier direkt im Beitrag lesen zu können!

Hast du ggf. auch mal einen Schaltplan gezeichnet, den du hier mit einstellen kannst (gif-Bild) ?


Danke und Gruß,
Cassio
 
Hi Cassio

Vielen Dank für deine Antwort

Hier mal der Code



CodeBox Bascom

'--------------------------------------------------------------------------'
' '
' 2010, Phantomias '
' Freeware '
'--------------------------------------------------------------------------'
'
'--------------------------------------------------------------------------'

$regfile = "m16def.dat" 'definieren des verwendeten Chips

$crystal = 8000000 'definieren des verwendeten externen Quarz (8MHz)


'-------------------------------------------------------------------------------
'###############################################################################
'Display Konfigurieren ########################################################
'###############################################################################
'-------------------------------------------------------------------------------

' Configuriere das LCD
'some routines to control the display are in the glcdKS108.lib file
$lib "glcdKS108.lbx"



'First we define that we use a graphic LCD
Config Graphlcd = 128 * 64sed , Dataport = Portc , Controlport = Portd , Cd = 0 , Rd = 1 , Ce = 2 , Ce2 = 3 , Enable = 4 , Reset = 5
'CE =CS1 Chip select
'CE2=CS2 Chip select second chip
'CD=Data/instruction
'RD=Read
'RESET = reset
'ENABLE= Chip Enable
Setfont Font8x8 'Schrift einbinden


'###############################################################################
'-------------------------------------------------------------------------------



'-------------------------------------------------------------------------------
'###############################################################################
'1wire Port definieren ########################################################
'###############################################################################
'-------------------------------------------------------------------------------

Config 1wire = Porta.3 'Tempfühler DS18S20

'###############################################################################
'-------------------------------------------------------------------------------


'-------------------------------------------------------------------------------
'###############################################################################
'Variablen definieren ########################################################
'###############################################################################
'-------------------------------------------------------------------------------



Dim Ist_temp As Single ' Ist-Temperatur
Dim Temp As Word '
Dim Temp1 As Integer '
Dim Scratch(9) As Byte '
Dim I1w As Byte '


Dim Min1 As Single
Dim Max1 As Single
Min1 = 9999


Dim Akt As String * 10
Dim Minn As String * 10
Dim Maxx As String * 10


Dim Tempon As Single
Dim Tempoff As Single

Dim Line1 As String * 20
Dim Line2 As String * 20







'###############################################################################
'-------------------------------------------------------------------------------



'-------------------------------------------------------------------------------
'###############################################################################
'DS1307 Konfigurieren: ###################################################
'###############################################################################
'-------------------------------------------------------------------------------


Config Sda = Porta.1 ' I2C Bus konfigurieren
Config Scl = Porta.0
Const Ds1307w = &HD0 ' Addresse der Ds1307 Uhr
Const Ds1307r = &HD1

Config Clock = User ' Interne Time/Date Routinen für Bascom konfigurieren



'Config Dcf77 = Pina.2 , Timer = 1 , Timer1sec = 1 , Debug = 1 , Update = 0 , Check = 1 , Inverted = 1 , Gosub = Sectic
'Dim Puls As Bit , Sync As Bit , Sec_z As Byte
'Enable Interrupts

Config Date = Dmy , Separator = .


'Time$ = "21:36:00"
'Date$ = "11.01.11" ' Stellen der Uhr, muss nur einmal ausgeführt werden


'###############################################################################
'-------------------------------------------------------------------------------



'-------------------------------------------------------------------------------
'###############################################################################
'Timer1: ###################################################
'###############################################################################
'-------------------------------------------------------------------------------


Config Timer1 = Timer, Prescale = 256

On Timer1 Timer_irq


Const Timervorgabe = 34286

Enable Timer1

Enable Interrupts


'###############################################################################
'-------------------------------------------------------------------------------



'-------------------------------------------------------------------------------
'###############################################################################
'Startbildschirm anzeigen: ###################################################
'###############################################################################
'-------------------------------------------------------------------------------


Gosub Lcd_cls2 'Anzeige löschen
Gosub Lcd_line

Lcdat 2 , 12 , ""
Lcdat 3 , 9 , ""
Lcdat 4 , 9 , ""
Lcdat 5 , 3 , ""

'-----------------Temperaturmessung starten für richtigen Wert nach dem Start---
'Gosub Get_1wire_1
'Do
' Temp = 1wread() ' Ende der Temperaturmessung abwarten
'Loop Until Temp = &HFF

Wait 2

Gosub Lcd_cls2 'Anzeige löschen
Gosub Lcd_line
Gosub Lcd_line1



'###############################################################################
'-------------------------------------------------------------------------------




'-------------------------------------------------------------------------------
'###############################################################################
'Hauptschleife ###############################################################
'###############################################################################
'-------------------------------------------------------------------------------



Do
Lcdat 7 , 5 , Date$
Lcdat 8 , 5 , Time$


Gosub Get_1wire_1
Gosub Get_1wire_2
Gosub Anzeige

Gosub Temp_on_off

Gosub Schaltuhr1




Loop

End
'###############################################################################
'-------------------------------------------------------------------------------


'-------------------------------------------------------------------------------
'###############################################################################
'Sub Funktionen: ##############################################################
'###############################################################################
'-------------------------------------------------------------------------------



'---------------------------------------------------------------------
'Timer1 ###########################################
'---------------------------------------------------------------------

Timer_irq:

Timer1 = Timervorgabe



Return

'---------------------------------------------------------------------
'Schaltuhr ###########################################
'---------------------------------------------------------------------

Schaltuhr1:

If Time$ > "07:00:00" And Time$ < "09:00:00" Then
Lcdat 8 , 80 , "Ein 1"

Else
Lcdat 8 , 80 , "Aus 1"

End If

Return

'---------------------------------------------------------------------
'TempAnzeige für Display ###########################################
'---------------------------------------------------------------------
Anzeige:

If Scratch(9) = Crc8(scratch(1) , 8) Then



If Ist_temp > Max1 Then
Max1 = Ist_temp
Maxx = Fusing(max1 , " ##.#")
Lcdat 4 , 90 , Maxx
Elseif Ist_temp < Min1 Then
Min1 = Ist_temp
Minn = Fusing(min1 , " ##.#")
Lcdat 3 , 90 , Minn
Else
End If


Akt = Fusing(ist_temp , "##.#")


Lcdat 3 , 9 , Akt
Else
End If

Return
'#####################################################################
'---------------------------------------------------------------------


'---------------------------------------------------------------------
'Rahmen für Display #################################################
'---------------------------------------------------------------------
Lcd_line1:

Line1 = " Temp: Min-Max"
Lcdat 1 , 1 , Line1 , 1

Line1 = "Uhrzeit: "
Lcdat 5 , 1 , Line1 , 1

Line1 = " " + Chr(248) + "C"
Lcdat 3 , 9 , Line1

Return


Lcd_line:

'Line oben links rechts
Line(0 , 0) -(128 , 0) , 255

'Line links oben unten
Line(0 , 0) -(0 , 63) , 255

'Line rechts oben unten
Line(127 , 0) -(127 , 63) , 255

Return

'#####################################################################
'---------------------------------------------------------------------



'---------------------------------------------------------------------
'Get_1wire ################################################
'---------------------------------------------------------------------


Get_1wire_1:

1wreset
1wwrite &HCC
1wwrite &H44

Do
Temp = 1wread() ' Ende der Temperaturmessung abwarten
Loop Until Temp = &HFF

Return

Get_1wire_2:

1wreset
1wwrite &HCC
1wwrite &HBE

For I1w = 1 To 9
Scratch(i1w) = 1wread()
Next

'Temp = Scratch(2)
'Shift Temp , Left , 8

'Temp = Temp + Scratch(1)
'Temp1 = Temp

Temp1 = Makeint(scratch(1) , Scratch(2))
Temp1 = Temp1 / 2
Ist_temp = Scratch(8) - Scratch(7)
Ist_temp = Ist_temp / Scratch(8)
Ist_temp = Ist_temp + Temp1
Ist_temp = Ist_temp - 0.25

Return


'---------------------------------------------------------------------
'Temp Steuerung: ############################################
'---------------------------------------------------------------------
Temp_on_off:


Tempon = Tempoff - 0.5
Tempoff = 28

If Ist_temp > Tempoff Then

Lcdat 7 , 90 , "Aus"

Elseif Ist_temp < Tempon Then

Lcdat 7 , 90 , "Ein"
Else
End If

Return


'#####################################################################
'---------------------------------------------------------------------


'---------------------------------------------------------------------
'Uhr mit DS1307 ####################################################
'---------------------------------------------------------------------


Dim Weekday As Byte
Getdatetime:
I2cstart ' Start
I2cwbyte Ds1307w ' DS1307 schreiben
I2cwbyte 0 ' DS1307 Adresszeiger auf 0 stellen

I2cstart ' Start
I2cwbyte Ds1307r ' DS1307 lesen (ab vorher eingestellter Adresse 0)
I2crbyte _sec , Ack ' Sekunden
I2crbyte _min , Ack ' Minuten
I2crbyte _hour , Ack ' Stunden
I2crbyte Weekday , Ack ' Wochentag (in Dummy gelesen da von date$/time$ nicht genutzt)
I2crbyte _day , Ack ' Tag
I2crbyte _month , Ack ' Monat
I2crbyte _year , Nack ' Jahr
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return

Setdate:
_day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
I2cstart ' Start
I2cwbyte Ds1307w ' DS1307 schreiben
I2cwbyte 4 ' DS1307 Adresszeiger auf 4 (Byte 5) stellen
I2cwbyte _day ' Tag schreiben
I2cwbyte _month ' Monat schreiben
I2cwbyte _year ' Jahr schreiben
I2cstop
Return

Settime:
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
I2cstart ' Start
I2cwbyte Ds1307w ' DS1307 schreiben
I2cwbyte 0 ' DS1307 Adresszeiger auf 0 stellen
I2cwbyte _sec ' Sekunden schreiben
I2cwbyte _min ' Minuten schreiben
I2cwbyte _hour ' Stunden schreiben
I2cstop
Return

'#####################################################################
'---------------------------------------------------------------------



'---------------------------------------------------------------------
'Display löschen ####################################################
'---------------------------------------------------------------------
Lcd_cls2:
Glcdcmd &H3E , 1 : Glcdcmd &H3E , 2 ' both displays off
Cls
Waitms 10
Glcdcmd &H3F , 1 : Glcdcmd &H3F , 2 'both on
Return
'#####################################################################
'---------------------------------------------------------------------

$include "font8x8.font"
 
Teil2 (Zeichen überschritten)



Naja Ich habe auf meiner Platine fürs Display einen 7805 draufgepackt
Von da hab ich auch die 5Volt für den DS1307 und DCF77

Komischerweise wird der 7805 sehr heiß?! Desweiteren habe ichs vorher mal
Probiert wenn ich den 7805 vom Pollinboard angreife dann zeigt er auch
@5 an wenn ich auslasse dann wieder normal?!

Brauch ich einen Kondensator für den 7805?
Mein Netzteil bringt 12V

Der Programmcode funktioniert so wie ich ihn gepostet habe! War aber gerade dabei den Timer in betrieb zu nehmen
Falls du dich wunderst.

mfg und vielen Dank
 
Hallo,

das mit dem heis werden des 7805 klingt wie ein Masse Fehler oder eine Verpolung des DS1307.

Für die komische Anzeige würde ich folgendes tippen, hatte ähnliche Probs mit der RTC DS1307 und der RTC DS1338.

DS1307 TIMEKEEPER REGISTERS Figure 3 im Datenblatt:

ADDRESS = 00H, BIT7 = CH, BIT6 + BIT5 + BIT4 = 10 seconds, BIT3 + BIT2 + BIT1 + BIT0 = seconds, FUNCTION = seconds, RANGE = 00-59


Habe es bei mir so behoben:


CodeBox Bascom

' Funktion zum Auslesen des Datum und der Uhrzeit aus der RTC DS1338

Function Rtc_ds1338_get_datetime() As Integer

I2cstart ' Start des auslesens
I2cwbyte I2c_w_ds1338 ' Variable DS1338 schreiben
I2cwbyte 0 ' Adresszeiger auf 0 stellen
I2cstart ' Start
I2cwbyte I2c_r_ds1338 ' Variable DS1338 lesen (ab vorher eingestellter Adresse 0)
I2crbyte B_sec , Ack ' Sekunden
I2crbyte B_min , Ack ' Minuten
I2crbyte B_hour , Ack ' Stunden
I2crbyte B_weekday , Ack ' Wochentag
I2crbyte B_day , Ack ' Tag
I2crbyte B_month , Ack ' Monat
I2crbyte B_year , Nack ' Jahr
I2cstop ' Stop des auslesens

B_sec = B_sec And &B01111111 ' Korrektur der falschen Anzeige wegen des Bit7 (CH) in der Addresse 00xh

_sec = Makedec(b_sec) ' Umwandlung der Messwerte nach Dezimal
_min = Makedec(b_min) ' Umwandlung der Messwerte nach Dezimal
_hour = Makedec(b_hour) ' Umwandlung der Messwerte nach Dezimal
_weekday = Makedec(b_weekday) ' Umwandlung der Messwerte nach Dezimal
_day = Makedec(b_day) ' Umwandlung der Messwerte nach Dezimal
_month = Makedec(b_month) ' Umwandlung der Messwerte nach Dezimal
_year = Makedec(b_year) ' Umwandlung der Messwerte nach Dezimal

End Function
' --------------------------------------------------------------------------------------------------------------------------------------------------------------




Gruß Jörg
 
Hallo !

Deinen Code habe ich noch nicht durchgesehen.... :rolleyes:
Mache ich aber noch.

Momentan rätel ich etwas über deinen 7805.
Wenn er sehr heiß wird, dann verbrennt er eine Menge Leistung.
Kannst du die Eingangsspannung von 12V auf 9V oder gar 7,5V reduzieren?
Das würde dem 7805 schon sehr helfen. ;)
Sollte er immer noch recht heiß werden, stimmt etwas nicht!
Kannst du am Output des 7805 die gesamte Stromaufnahme deines Testaufbaus mal messen?


Der "Massefehler" muss ja auch nicht am 7805 liegen.
Überall wo GND benötigt wird und ein Draht hinführt, kann es auch eine schlechte Verbindung geben.

Was die Kondensatoren betrifft....
Darum wäre ein aktueller Schaltplan vom Aufbau auch sehr hilfreich gewesen.

Aber zum schnellen Kontrollieren für dich....
100nF Kondensatoren sollten z.B. direkt am 7805 (Output) sitzen und natürlich direkt am AVR.
Beim AVR bitte ALLE Spannugsversorgungspins (Vcc und GND) mit einem Kondensator versehen..... und möglichst nah am AVR selbst!
Bei deinem Mega16 also zwei Stück (Vcc + GND, AVcc + GND).

Am 7805 sollte natürlich ein 470µF bis 1000µF Elko nicht fehlen.... aber den wirst du wohl schon eingebaut haben.

So, mehr fällt mir momentan dazu nicht ein.
Wenn ich es schaffe, schaue ich mir deinen Code gleich noch mal an.
Ach so.... damit man ihn besser lesen kann, änder ich den Programmcode mal auf Highlight=Bascom. ;)

Gruß,
Cassio
 
Hallo !

Also ich habe mal zwei Fragen, die sich mir beim Durchsehen so gestellt haben...

Warum verwendest du für I2C nicht die Pin`s:
PC0 = SCL
PC1 = SDA

:confused:

Kannst du das nicht umändern?
Der Dataport für das LCD kann doch auch auf Port.D liegen und für den Controlport nimmst du PORT.A !



Dann mal zu den Variablen für Zeit und Datum...
Wenn du vom DS1307 die Werte holst, dann konvertierst du die Werte gleich von BCD in Dezimal..... das ist ja auch OK.

Wenn du allerdings deine DS1307 stellen möchtest, dann konvertierst du die Dezimalwerte wieder in BCD..... damit sie für die DS1307 mundgerecht sind.
Allerdings hast du deine Variablen nun alle im BCD-Format für die Softclock vorliegen...
Theoretisch müsstest du die doch erst noch wieder zurück konvertieren. :hmmmm:

Nimm für die BCD-Werte doch andere Variablen..... oder nur eine "Allzweckvariable" und ändere deine Routine zum stellen der Uhr.
So ersparst du dir das "Zurückkonvertieren" von _sec, _min, _hour und so weiter.


Warum dein Display jedoch @5 anzeigt, will sich mir momentan nicht erschließen.....
Da du I2C nur emulierst und nicht die Harwareports verwendest (PC.0 & PC.1), sollte dir das auch eigentlich keinen Unsinn auf den Dataport vom Displays verursachen. :hmmmm:

Mal nebenbei....
Im ASCII-Code ist das "@" Zeichen = 64d bzw. 40h
und die "5" = 53d bzw. 35h
Hilft das ggf. weiter? :hmmmm:
Ich glaub nicht. ;)

Gruß,
Cassio
 
Hallo

Vielen Dank für die Antworten



Leider habe ich keinen Schaltplan von der Aktuellen schaltung...
Hab ein Pollin board und den schaltplan von Markus genommen für Ds1307
und auch den Schaltplan von Markus für DCF77

Dann hab ich das auf eine Lochrasterplatine gelötet



Bezüglich der Spannung:Wollte sie schon verringern hatte aber nur ein 5V netzteil leider funktioniert damit das Pollin-Board nicht...


"Am 7805 sollte natürlich ein 470µF bis 1000µF Elko nicht fehlen.... aber den wirst du wohl schon eingebaut haben."

Nein hab ich nicht?! Wie soll ich den einbauen?
Eventuell hier der Fehler?


Bezüglich der Pinvergabe:

Ich weiß ich hätte andere Pins verwenden sollen/können
Nur wollte ich meinen Testaufbau nicht wieder alles ablöten und neu verlöten.

Wobei ich das jetzt bald mal machen muss bei den ganzen durcheinander.

Was würde sich ändern wenn ich diese Pins nehme?Performance oder was anderes?

mfg
 
Hallo !

Ich denke mal, dass einer der Hauptprobleme dies sein wird:

.....den schaltplan von Markus genommen für Ds1307
und auch den Schaltplan von Markus für DCF77


und hier:

"Am 7805 sollte natürlich ein 470µF bis 1000µF Elko nicht fehlen.... aber den wirst du wohl schon eingebaut haben."

Nein hab ich nicht?! Wie soll ich den einbauen?
Eventuell hier der Fehler?

Du kopierst viel zu viel!
Dann lötest du auch gleich alles zusammen, anstatt erst mal auf einem Steckbrett alles auszuprobieren.
Diese Steckbretter (oder neudeutsch auch "Breadboards" genannt) sind nicht nur etwas für "KOSMOS-Baukasten-Anfänger". ;)


Ich finde es ja persönlich nicht schlimm, wenn jemand anfängt und erst mal Schaltungen nachbaut und Programme kopiert....
Wie du aber nun selber merkst, ist es meistens damit nicht getan. ;)


Für weitere geistige Ergüsse ist es mir nun zu Spät.
Ich muss erst mal dringend.... :boring: :sleep:

Gruß,
Cassio
 
Hallo !

Es war wohl gestern schon etwas spät (bzw. heute etwas früh)......

Da du im Programm die Routine für "Config DCF77" herausgenommen hast, bin ich da nicht mehr drauf eingegangen....

Das du dich aber entscheiden musst, ob du DCF77 benutzt oder den Timer1 manuell konfigurierst, ist dir aber schon klar?
Beides zusammen funktioniert nicht!


Gruß,
Cassio
 
Hallo Phantomias2006,

wenn Du meine SW so übernommen hättest wie ich diese eingestellt habe und wenn Du die Beschaltung auch so vorgenommen hättest wie ich es gamacht habe dann würde es auch funktionieren ....

Sei mit nicht böse aber
... Du kopierst Zeug zusammen von dem Du wahrscheinlich nicht weist wie es funktioniert
... Du führst Änderungen durch bei denen Du vermutlich nicht weißt was sie bewirken

und dann ..... wunderst Du Dich das es nicht funktioniert.

Warum gehst Du nicht Schritt für Schritt vor und änderst erst das eine und dann das andere und stellst die einzelnen Funktionen sicher.

Unterschiede zu meiner Implementierung sind ... soweit ich das auf den ersten Blick erkennen kann:

[1] Verwendung der SW-I2C Funktion von BASCOM mit anderen PIN's. ich betreibe die RTC an dem HW I2C-Bus des Atmega und verwende auch die HW-treiber für I2C von BASCOM durch Verwendung der entsprechenden LIB

[2] CLOCK user. ich werdende den DCF77 als SoftClock mittels reiner SW-unterstützung uns synce nach definierten Regeln die SW-Uhrzeit mittels Uhrzeit im RTC und DCF77. Ich verwende die RTC-Uhrzeit rein als Uhrzeitbufferung bei SystemstartUp, snce aber dann einmal durch DCF77.
Das hat mehrere Vorteile, angefangen beim SECTIC für den Sekundentakt usw.

[3] Du konfigurierst den Timer1 um der eigentlich durch Config DCF77 belegt ist und wunderst Dich über komisches Verhalten.


Alsooo .... zunächst würde ich Dir dringend vorschlagen, Dir in der BASCOM-Hilfe die Kapitel zum I2C zun zur Softclock bzw. zum DCF77 mal genau durchzulesen. Dazu findest Du auf der MCS-Seite zur jeweils gültigen BASCOM-Version das entsprechende ca. 20MByte große Manual. Das empfehle ich Dir dringend.
Damit lösen sich nicht Deine Probleme von selbst aber Du entwickelst mehr Verständnis dafür, was Du tust.

Dann sehen wir weiter ....

Grüße,
Markus
 
Füge mal folgende Zeile hinzu, der DS1307 kann nur 100kHz I²C-Geschwindigkeit.

Config I2cdelay = 10 'I²C-Busgeschwindigkeit 100.000kHz

Gruß
Udo
 
Gleiches erreicht man mit dem Befehl
Config Twi = 100000 ' Taktfrequenz 100 kBaud

Ansonsten würde ich noch folgendes machen:
' TWI gleich einschalten, das macht BASCOM ansonsten erst beim I2CStart
Twcr = &B00000100 ' nur TWEN setzen
Damit wird erreicht, dass der I2C auf jeden Fall gleich rennt.

Grüße,
Markus
 
Hallo

Erstmal vielen Dank für eure Antworten bzw. Ansichten

Dennoch muss ich mal Stellung dazu nehmen denn nicht alles ist so wie
es für euch scheint (bzw. Denke ich das mal)

Du kopierst viel zu viel!
Dann lötest du auch gleich alles zusammen, anstatt erst mal auf einem Steckbrett alles auszuprobieren.
Diese Steckbretter (oder neudeutsch auch "Breadboards" genannt) sind nicht nur etwas für "KOSMOS-Baukasten-Anfänger".

Ja das ist wohl richtig aber ich denke mir halt ich muss das Rad nicht neu erfinden damit es sich dreht...
Aber da ich de Ds1307 gesockelt habe war es mir egal wegen den paar Widerständen und Kondensatoren das ich die mal schnell auf einen Lochraster
löte.


Da du im Programm die Routine für "Config DCF77" herausgenommen hast, bin ich da nicht mehr drauf eingegangen....

Das du dich aber entscheiden musst, ob du DCF77 benutzt oder den Timer1 manuell konfigurierst, ist dir aber schon klar?
Beides zusammen funktioniert nicht!

Dessen bin ich mir bewusst.Der Code vom DCF77 ist auskommentiert und
war nur für Testzwecke bezüglich des DCF77
Mit dem Timer hab ich erst gestern kurz vorm Posten herumgespielt!Darum ist dieser Code im Programm enthalten bzw. der andere auch noch drin

wenn Du meine SW so übernommen hättest wie ich diese eingestellt habe und wenn Du die Beschaltung auch so vorgenommen hättest wie ich es gamacht habe dann würde es auch funktionieren ....

Sei mit nicht böse aber
... Du kopierst Zeug zusammen von dem Du wahrscheinlich nicht weist wie es funktioniert
... Du führst Änderungen durch bei denen Du vermutlich nicht weißt was sie bewirken

Tja Markus was soll ich dazu sagen..
Ja ich kopiere die eine oder andere Routine aber ich lese auch aufmerksam die enzelnen Threads dazu schau mir den Quellcode jedesmal wieder an.
Überlege wie es Funktioniert schlag einzelne Befehle nach usw.
Ja ich geb zu das ich nicht überall weiß wie was jetzt genau Funktioniert usw.
Wobei ich auch sagen muss das von mal zu mal alles klarer wird. Sprich je öffter ich mir den Quellcode ansehe und nachlese desto verständlicher wird er für mich.

Ja ich füre Änderungen im Programm durch.
Ich würde nichmal sagen das ich nicht weiß was sie bewirken aber ich lerne halt durch diese "Spielerein" mehr als wenn ich nur strickt Handbücher auswendig lerne.

Warum gehst Du nicht Schritt für Schritt vor und änderst erst das eine und dann das andere und stellst die einzelnen Funktionen sicher.

Ich dachte Eigendlich das ich das so gemacht habe?!

Erst die Tempmessung als die Funktionierte dann ein paar Spielerein mit
der Temp (Sieht man im Programm Stichwort "Tempschaltung")
Dann inbetriebnahme des DS1307

Unterschiede zu meiner Implementierung sind ... soweit ich das auf den ersten Blick erkennen kann:

[1] Verwendung der SW-I2C Funktion von BASCOM mit anderen PIN's. ich betreibe die RTC an dem HW I2C-Bus des Atmega und verwende auch die HW-treiber für I2C von BASCOM durch Verwendung der entsprechenden LIB

Gut ja ich verwende nicht diesen Port aber ich wusste auch nicht das es dann solche Probleme gibt?Aber mann lernt nie aus :D

[2] CLOCK user. ich werdende den DCF77 als SoftClock mittels reiner SW-unterstützung uns synce nach definierten Regeln die SW-Uhrzeit mittels Uhrzeit im RTC und DCF77. Ich verwende die RTC-Uhrzeit rein als Uhrzeitbufferung bei SystemstartUp, snce aber dann einmal durch DCF77.
Das hat mehrere Vorteile, angefangen beim SECTIC für den Sekundentakt usw.

Das ist der grund warum ich deinen Quellcode nicht verwendet habe!
Ich habe die ganze Zeit gesagt das ich DCF77 nicht nutzen will!!!
Ja ich hab den DCF77 auf der Platine mitangeschlossen (zu Test"Spiel"zwecken) aber ich brauch bzw. will keinen DCF77 im jetztigen Programm! Auskommentierter Quellcode dient für mich rein als Spielerei!!

[3] Du konfigurierst den Timer1 um der eigentlich durch Config DCF77 belegt ist und wunderst Dich über komisches Verhalten.

Nein Ich Konfiguriere Timer1 nicht bzw. ich nutze die Config DCF77 nicht wenn ich Timer1 konfiguriere! Mit dem Auskommentierte Quellcode vom
DCF77 hab ich mich ca. vor 1Woche gespielt seither ist er auskommentiert.
Und du hast mir Gestern , im anderen Thread, das mit dem Timer geschrieben
Dann hab ich mich ein wenig damit gespielt wobei ich das auch in meinen Post angemerkt habe

Der Programmcode funktioniert so wie ich ihn gepostet habe! War aber gerade dabei den Timer in betrieb zu nehmen
Falls du dich wunderst.

[3] Du konfigurierst den Timer1 um der eigentlich durch Config DCF77 belegt ist und wunderst Dich über komisches Verhalten.

Timer1 ist nicht durch DCF77 belegt!!!
Hab kein DCF77 im Programm denn wenn ichs hätte würde ich mich nicht wundern!

Alsooo .... zunächst würde ich Dir dringend vorschlagen, Dir in der BASCOM-Hilfe die Kapitel zum I2C zun zur Softclock bzw. zum DCF77 mal genau durchzulesen. Dazu findest Du auf der MCS-Seite zur jeweils gültigen BASCOM-Version das entsprechende ca. 20MByte große Manual. Das empfehle ich Dir dringend.
Damit lösen sich nicht Deine Probleme von selbst aber Du entwickelst mehr Verständnis dafür, was Du tust.

Vielen dank für die Info das werde ich in der nächsten Zeit machen sobald ich etwas Zeit habe...

Füge mal folgende Zeile hinzu, der DS1307 kann nur 100kHz I²C-Geschwindigkeit.

Config I2cdelay = 10 'I²C-Busgeschwindigkeit 100.000kHz

Gruß
Udo

Udo bzw. Markus

Vielen dank für die Info werde es mal ausprobieren

mfg
Florian
 
Hi Florian,

also Code klauen, dran rumprobieren, durch Erfolg und Irtum lernen und Befehle
die in dem Code interessant aussehen oder unbekannt sind nachlesen ist eigentlich
die richtige Methode um über kurz oder lang zu eigenem Code zu kommen.

Finde ich jedenfalls.

Also weiter so ... ;)

Gruß
Dino
 
@Dino

Vielen Dank das du meine Ansichten teilst :D

Wie ihr eventuell auch sehen könnt von ich seit Jänner 2010 hier im Forum angemeldet.
Sprich ich Interessiere mich schon seit 1Jahr für Atmega.
Mein erster Post hier war im August. Also ich hab bis August als Stiller Teilnehmer hier im Forum Teilgenommen und mir alle möglichen Themen durchgelesen und verfolgt. Ich habe/verbringe auch etliche Stunden ,je nachdme wie ich Zeithabe, hier im Forum nur mit lesen. Ich bin auch nicht der Typ der gleich wegen jedem scheiß Postet , denk ich zumindest:rolleyes: , aber für gewisse sachen Fehlt mir einfach das Verständis bzw. die erfahrung bzw2 mann denkt zu kompliziert und verläuft sich irgendwo.
Und da braucht man halt so eine Gemeinde wie euch die einen wieder auf den richtigen Weg bringen.

mfg
 
.....ist eigentlich die richtige Methode um über kurz oder lang zu eigenem Code zu kommen.

Finde ich jedenfalls.


Hallo Florian, hallo Dino!

So wie Dino es schon geschrieben hat, sehe ich das eigentlich auch.
Die Methode ist völlig in Ordnung! :)


Leider kann ich das bei dir nicht wirklich erkennen. :cool:
Du nimmst Teile von meinem Code für das Display und schließt es genauso an.
Dann nimmst du diverse Teile aus Markus verschiedenen Programmen, nebst Anschlusspläne und kopierst dann alles zusammen.
Ich erkenne da kein "selber ausprobieren".

Ich habe dir z.B. zig Zeilen geschrieben, wie du einen Timer berechnen und einstellen kannst......
Aber was hast du gemacht?
Du hast mal wieder nur den fertigen Code zum Timer1 von Markus genommen.
War ja auch viel einfacher... mal eben schnell Copy und Paste durchzuführen, als selber nachzudenken.


Bis jetzt war ich auch geduldig, freundlich und habe mich daran nicht weiter gestört.
Als ich dann aber gemerkt habe, dass du z.B. nicht einmal Grundschaltungen zur Spannungsversorgung selber "entwickeln" kannst, war meine Geduld am Ende.

Du hast doch diese "Fehler" mit den Kondensatoren mit Sicherheit nur gemacht, weil sie in den Beispielzeichnungen nicht enthalten waren.
Das ist z.B. der Grund, warum ich in fast allen meinen Beispielen selten alles einzeichne...... was eigentlich dahin gehört.
So kann man die "Kopierer" immer schnell erkennen. ;)


Sei es wie es ist.....
Ich enthalte mich nun erst mal und gebe vielleicht wieder Tipps wenn ich merke, dass von dir eigene Resultate folgen.


Trotzdem wünsche ich dir natürlich weiterhin viel Spaß mit dem Hobby.

Gruß,
Cassio
 
Hallo

Leider kann ich das bei dir nicht wirklich erkennen.
Du nimmst Teile von meinem Code für das Display und schließt es genauso an.
Dann nimmst du diverse Teile aus Markus verschiedenen Programmen, nebst Anschlusspläne und kopierst dann alles zusammen.
Ich erkenne da kein "selber ausprobieren".

Gut ich dachte das du den Code eingestellt hast damit man ihn verwenden kann?! Ich habe auch von anfang an gesagt das ich das Display nach deinen
Thread angeschlossen und in Betrieb genommen habe.

Ja leidergottes ist es einfacher das Display mal nach einen schaltplan und einen Quellcode der dafür bestimmt ist anzuschließen und dann zu spielen.

Wenn ich dich an folgendes erinnern darf

Aber wie gesagt dein Schlatplan stimmte nicht mit der beschaltung überein
Musste Ce = 2 , Ce2 = 3 ändern weil die Displayhälften vertauscht waren
Das stand nicht im Thread hätte ich zumindest nicht gesehen.
Ich bin selber draufgekommen habe selber probiert bzw. mich mit dem Quellcode auseinander gesetzt und daran gelernt!
Desweiteren habe ich die Berechnung (Formel für die Tempanzeige) ursprünglich selber geschrieben da wo die Anzeige nicht gestimmt hat.
Auch das Datenblatt hab ich mir durchgelesen und die Formel rausgeschieben.
Dann hast du gesagt ich soll mir mal deine Berechnung ansehen und habe dann deine Formel genommen.

Gut dann bin ich wohl schuldig!

Dann nimmst du diverse Teile aus Markus verschiedenen Programmen, nebst Anschlusspläne und kopierst dann alles zusammen.
Ich erkenne da kein "selber ausprobieren".

Welcher Teil vom Programm bitte ist von Markus? (Außer event. der Timer mit dem ich expermimentiert habe)
Anschlussplan Ja Programm Nein

Ich habe dir z.B. zig Zeilen geschrieben, wie du einen Timer berechnen und einstellen kannst......
Aber was hast du gemacht?
Du hast mal wieder nur den fertigen Code zum Timer1 von Markus genommen.
War ja auch viel einfacher... mal eben schnell Copy und Paste durchzuführen, als selber nachzudenken.

Ja ich habe seine Zeilen verwendet zum Testen!Ja ich habe mir auch Mein Buch zuhand genommen (bevor Markus das TimerBeispiel gepostet hat) und hab mir das mit den Timern durchgelesen leider für mich nicht 100% verständlich aus dem Buch.

Nein ist nicht einfach!!! Zumal der Timer so nicht Funktioniert wie er im Quellcode steht denn wenn ich die Zeilen so im Quellcode habe hängt sich das Programm teilweise auf und ich bekomme wirre anzeigen am Display!

Ich habe aber nicht gleich geschieben "geht nicht" etc. sondern wollte mich mit den Timern einfach noch etwas länger beschäftigen und dann wenn eventuell noch Fragen auftreten nachfragen.
Kannst du jetzt glauben oder auch nicht.

Bis jetzt war ich auch geduldig, freundlich und habe mich daran nicht weiter gestört.
Gut zu wissen.

Als ich dann aber gemerkt habe, dass du z.B. nicht einmal Grundschaltungen zur Spannungsversorgung selber "entwickeln" kannst, war meine Geduld am Ende.

Tut mir leid ich bin kein Elektrotechniker! Ich kenne mich halt nicht so gut aus wie ihr...

Du hast doch diese "Fehler" mit den Kondensatoren mit Sicherheit nur gemacht, weil sie in den Beispielzeichnungen nicht enthalten waren.
In den schaltplänen ist nur immer 5V eingezeichnet.

Ich habe mir das Datenblatt vom 7805 runtergeladen und nach dieser Pinbelegung angeschlossen. Habe aber nicht den Beispielschaltplan gesehen.

Ich enthalte mich nun erst mal und gebe vielleicht wieder Tipps wenn ich merke, dass von dir eigene Resultate folgen.
Ja das werde ich jetzt besser auch machen denn irgendwie fühle ich mich von
euch gesteinigt.
 
....irgendwie fühle ich mich von
euch gesteinigt.


Hallo Florian!

DAS war mit Sicherheit nicht meine Absicht..... und von den anderen wohl auch nicht!
Steinigen (oder Ähnliches) wollte und will dich hier bestimmt keiner!!!


Ich finde es aber gut, dass du in dieser Form über dein Unbehagen geschrieben hast!
Viele andere Anfänger hätten jetzt gemeckert, geschimpft, wären beleidigt gewesen, oder wären beleidigend geworden.

Für dein offenes, faires und stilvolles Verhalten hast du zumindest bei mir nun ein dickes Plus ! :tee:


OK, dann will ich mal nicht alles überbewerten und auf die Goldwaage legen. :victory:


Hast du inzwischen den Ausgang des 7805er mit einem Elko und einen 100nF Kerko versehen?
Macht dein Display immer noch diese wirren Zeichen (@5@5@5)?

Gruß,
Cassio
 
Hallo Cassio

Vielen Dank für deine Antwort.

Leider bin ich "noch" nicht im besitz dieser Bauteile.
Habe aber jetzt Probehalber den RTC an die Spannungsversorgung
des PollinBoard's gehängt und siehe da wenn ich jetzt mein DCF77 abstecke
läuft die Uhr weiter.:adore:
Anzeigefehler kann ich noch nicht sagen... Denke aber das diese damit
auch behoben sind.

Den DS18S20 habe ich nämlich schon die ganze Zeit an der Spannungsversorgung des PollinBoards hängen weil da irgendwo im Datenblatt glaub ich gestanden ist das der an der selben Stromquelle wie der Atmel hängen muss.

Beim RTC hab ich das aber nicht gelesen.

Mein Aktuelles Projekt wird dann ein "Brutkasten"
Da mein Vater "Hobbymässig" ein paar Hühner hat und ca. 2mal im Jahr Eier ausbrüten möchte (Damit wir im Sommer was zu Grillen haben:D )
möchte er einen Brutaperat bauen.

Auf den Seiten wo man soetwas bestellen kann kostet alleine die Steuerung für die Temp. €60 Euro. (Natürlich ohne Display Anzeige etc. ist mit einen Poti zum einstellen)

Die MIN-MAX Anzeige habe ich im Programm derzeit drinn damit ich auswerten kann ob es öffter zu Fehlern Fehlmessungen etc. kommt.


Nächste woche sollte die Heizung geliefert werden dann werde ich mal schaun ob das ganze halbwegs Funktioniert (Nur mal die Temp. Steuerung)

Was soll das Programm in Zukunft können:

Steuerung der Temp.
Anzeige der noch verbleibenden Tage bis zum schlüpfen.
Automatische Temp.anhebung ab dem 19ten Tag
Da wollens die Eier etwas wärmer:D

Luftfeuchtigkeit messen und eventuell den Schieber für die Luftfeuchtigkeit
mit einen Servo automatisieren.

Automatisches Eierwenden 3mal Täglich jeweils 1/3

Ein Menü zum Einstellen der Hysterese der Temp
der Uhrzeit und dieverse anderer sachen.

Aber das ist alles noch Zukunftsmusik!

Falls erwünscht kann ich das Projekt dann auch gerne hier einstellen sobald
die Testphase beendet ist ich wieder etwas Zeit habe und mit dem Bau des
Brutkastens beginne

mfg
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)