| Author |
Message
|
Logan Poziom 22

Joined: 09 Jul 2004 Posts: 1803 Location: Jelenia Góra
|
#1
10 Mar 2010 20:44 Atmega8L i sprzętowy I2C |
|
|
|
Witam
Mam bardzo dziwny problem z komunikacją z układem DS1307. Zacznę od początku. Mam zestaw ewaluacyjny z Atmega8 i układem DS1307, jakiś czas temu napisałem sobie pogram do komunikacji poprzez sprzętowy TWI. Wszystko działało aż miło, teraz chciałem znowu skomunikować się z DS'em, ale okazało się, że nie mam żadnej komunikacji. Sprawdziłem 10 razy wszystkie połączenia i jest OK (z resztą tu się nie da pomylić bo to płytka ewaluacyjna), w akcie desperacji przelutowałem DS'a. Bezskutecznie. Jedyne co zmieniłem to procesor z Atmega8 na Atmega8L, ale w nocie katalogowej nie znalazłem nic co by wskazywało na jakieś problemy z TWI. Postanowiłem iść dalej i sprawdzić która instrukcja zwraca błąd. Napisałem prosty programik:
| Code: |
$regfile = "m8def.dat" 'Atmega8
$crystal = 8000000 'kwarc 8MHz
$lib "i2c_twi.lbx" 'sprzetowy I2C
Config Scl = Portc.5
Config Sda = Portc.4
Config Twi = 100000 'predkosc 100kHz
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.4 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.0 , Rs = Portd.7
Cursor Off
Const Adres_w = &B11010000
Const Adres_r = &B11010001
Cls
I2cstart
Gosub Blad
I2cwbyte Adres_w
I2cwbyte &H0 'adres rejestru
I2cwbyte &H0 ' zeruje bit CH
I2cstop
I2cstart
I2cwbyte Adres_w
I2cwbyte &H07 'rejestr kontrolny
I2cwbyte &B00010000 'ustawiam 1Hz na wyjsciu DS1307
I2cstop
End
Blad:
If Err = 1 Then
Lcd "Blad"
Else
Lcd "OK"
End If
Return
|
Okazało się, że już pierwsza instrukcja I2Cstart zwraca błąd. Gdzie szukać usterki ?
|
|
| Back to top |
|
 |
ElektroTME Poziom 14

Joined: 09 Sep 2008 Posts: 154 Location: szcz
|
#2
10 Mar 2010 21:54 Re: Atmega8L i sprzętowy I2C |
|
|
|
U mnie w zegarze z pcf'em działa to w takiej konfiguracji, lecz nie korzystam z zewnętrznej biblioteki:
| Code: |
$regfile = "m8def.DAT"
$crystal = 8000000
Config Pinc.4 = Input
Config Pinc.5 = Input
Config Scl = Portc.5
Config Sda = Portc.4
Config I2cdelay = 5
Const Pcf_o = 163 'adres zegara RTC odzczytu
Const Pcf_z = 162 'adres zegara RTC zapisu
Const Control = 8
I2cinit
I2cstart
I2cwbyte Pcf_z
I2cwbyte 8
I2cwbyte Control
I2cstop |
Edit: na atmedze8 i 8L działa tak samo :P
|
|
| Back to top |
|
 |
Logan Poziom 22

Joined: 09 Jul 2004 Posts: 1803 Location: Jelenia Góra
|
#3
10 Mar 2010 21:59 Re: Atmega8L i sprzętowy I2C |
|
|
|
Ale to nie ma nic do rzeczy, próbowałem nawet sampli z Bascoma, które wcześniej działały bez problemu.
|
|
| Back to top |
|
 |
ElektroTME Poziom 14

Joined: 09 Sep 2008 Posts: 154 Location: szcz
|
#4
10 Mar 2010 22:20 Re: Atmega8L i sprzętowy I2C |
|
|
|
Nie widzę w Twoim kodzie instrukcji I2cinit, może dlatego wywala błąd?
Jeżeli wywala Ci błędy to przyczyna leży raczej po stronie programu.
Prześledź jeszcze raz wszystko krok po kroku, może o czymś zapominasz, spróbuj ustawić piny jako wejścia, dodać kilka wydawałoby się zbędnych instrukcji, może zaskoczy.
|
|
| Back to top |
|
 |
atom1477 Poziom 25

Joined: 14 Jul 2005 Posts: 6360
|
#5
10 Mar 2010 22:26 Re: Atmega8L i sprzętowy I2C |
|
|
|
No i spróbuj na programowym I2C.
|
|
| Back to top |
|
 |
Google

|
#
10 Mar 2010 22:26 |
|
|
|
|
|
| Back to top |
|
 |
janbernat Poziom 23

Joined: 21 Oct 2008 Posts: 3680 Location: Warszawa
|
#6
10 Mar 2010 22:35 Re: Atmega8L i sprzętowy I2C |
|
|
|
A co to za płytka?
|
|
| Back to top |
|
 |
Logan Poziom 22

Joined: 09 Jul 2004 Posts: 1803 Location: Jelenia Góra
|
#7
10 Mar 2010 23:07 Re: Atmega8L i sprzętowy I2C |
|
|
|
| ElektroTME wrote: |
Nie widzę w Twoim kodzie instrukcji I2cinit, może dlatego wywala błąd?
Jeżeli wywala Ci błędy to przyczyna leży raczej po stronie programu.
Prześledź jeszcze raz wszystko krok po kroku, może o czymś zapominasz, spróbuj ustawić piny jako wejścia, dodać kilka wydawałoby się zbędnych instrukcji, może zaskoczy. |
Zobacz w helpie kiedy się używa I2Cinit. Zwróć też uwagę, że wcześniej wszystko działało na tym samym wsadzie, wątpię, żeby stał się cud i zniknęły, bądź pojawiły się nowe instrukcje w pliku .bas.
:arrow: atom1477 Na programowym nigdy nie ma błędu (zmienna Err zawsze 0), nawet jak odłączę układ...
:arrow: janbernat Płytka to EVBavr04 z Propoxu.
|
|
| Back to top |
|
 |
janbernat Poziom 23

Joined: 21 Oct 2008 Posts: 3680 Location: Warszawa
|
#8
10 Mar 2010 23:14 Re: Atmega8L i sprzętowy I2C [Bascom] |
|
|
|
A czy już wylutowałeś akumulator i wstawiłeś normalne ogniwo CR2032 zamiast ich wynalazku?
I ustaw zworki żeby się nie ładowało.
Bo przekracza dopuszczalne napięcie na DS i nic nie chodzi.
|
|
| Back to top |
|
 |
Logan Poziom 22

Joined: 09 Jul 2004 Posts: 1803 Location: Jelenia Góra
|
#9
10 Mar 2010 23:26 Re: Atmega8L i sprzętowy I2C [Bascom] |
|
|
|
| janbernat wrote: |
A czy już wylutowałeś akumulator i wstawiłeś normalne ogniwo CR2032 zamiast ich wynalazku?
I ustaw zworki żeby się nie ładowało.
Bo przekracza dopuszczalne napięcie na DS i nic nie chodzi. |
Tak, przerabiałem to na samym początku, po wlutowaniu nowego DS uruchomiłem wszystko (kiedyś).
|
|
| Back to top |
|
 |
janbernat Poziom 23

Joined: 21 Oct 2008 Posts: 3680 Location: Warszawa
|
#10
10 Mar 2010 23:42 Re: Atmega8L i sprzętowy I2C [Bascom] |
|
|
|
To może CR2032 jest już słabe- jak to było dawno?
Ja używałem do tego
$lib "ds1307clock.lib"
|
|
| Back to top |
|
 |
Logan Poziom 22

Joined: 09 Jul 2004 Posts: 1803 Location: Jelenia Góra
|
#11
10 Mar 2010 23:58 Re: Atmega8L i sprzętowy I2C [Bascom] |
|
|
|
| janbernat wrote: |
To może CR2032 jest już słabe- jak to było dawno?
Ja używałem do tego
$lib "ds1307clock.lib" |
Faktycznie trochę słabe już to ogniwo - 2,7V, wg noty Vbat_min to 2V. Na wszelki wypadek wsadziłem nowa, ale dalej nie działa.
Tej biblioteki "ds1307clock.lib" w Bascomie 1.11.9.8 już nie ma, w starszej wersji jest, ale mimo to, programowy I2C i tak nie działa (próbowałem Sampla ds1307.bas).
|
|
| Back to top |
|
 |
janbernat Poziom 23

Joined: 21 Oct 2008 Posts: 3680 Location: Warszawa
|
#12
11 Mar 2010 00:14 Re: Atmega8L i sprzętowy I2C [Bascom] |
|
|
|
No, ale się kompiluje bez błędów w 1.11.9.8.
Zarówno z jak i bez $lib "ds1307clock.lib".
|
|
| Back to top |
|
 |
Logan Poziom 22

Joined: 09 Jul 2004 Posts: 1803 Location: Jelenia Góra
|
#13
15 Mar 2010 21:22 Re: Atmega8L i sprzętowy I2C [Bascom] |
|
|
|
Dostaje błąd "Library file not found". Używam dema 1.11.9.8, w starszej wersji, z tą biblioteką, program się kompiluje, ale nie działa. Kiedyś działał.
|
|
| Back to top |
|
 |
Google

|
#
15 Mar 2010 21:22 |
|
|
|
|
|
| Back to top |
|
 |
janbernat Poziom 23

Joined: 21 Oct 2008 Posts: 3680 Location: Warszawa
|
#14
15 Mar 2010 22:07 Re: Atmega8L i sprzętowy I2C [Bascom] |
|
|
|
Uzywam pełnej wersji- normalnie się kompiluje.
Wyjście po I2Cinit do gosub Blad- gdzie masz dwukrotne ustawianie LCD-dużo czasu to pochłania- to nie jest pomysł na debugowanie.
Spróbuj zrobić to na jakiejś diodzie z toggle albo coś równie szybkiego.
|
|
| Back to top |
|
 |
Logan Poziom 22

Joined: 09 Jul 2004 Posts: 1803 Location: Jelenia Góra
|
#15
15 Mar 2010 22:16 Re: Atmega8L i sprzętowy I2C [Bascom] |
|
|
|
Słuszna uwaga, zmieniłem kod:
| Code: |
$regfile = "m8def.dat" 'Atmega8
$crystal = 8000000 'kwarc 8MHz
$lib "i2c_twi.lbx" 'sprzetowy I2C
Config Scl = Portc.5
Config Sda = Portc.4
Config Twi = 100000 'predkosc 100kHz
Const Adres_w = &B11010000
Const Adres_r = &B11010001
Config Portd.0 = Output
Led Alias Portd.0
Set Led
I2cstart
Gosub Blad
I2cwbyte Adres_w
I2cwbyte &H0 'adres rejestru
I2cwbyte &H0 ' zeruje bit CH
I2cstop
I2cstart
I2cwbyte Adres_w
I2cwbyte &H07 'rejestr kontrolny
I2cwbyte &B00010000 'ustawiam 1Hz na wyjsciu DS1307
I2cstop
End
Blad:
If Err = 1 Then
Reset Led
End If
Return |
Dalej mam błąd.
|
|
| Back to top |
|
 |
janbernat Poziom 23

Joined: 21 Oct 2008 Posts: 3680 Location: Warszawa
|
#16
15 Mar 2010 22:27 Re: Atmega8L i sprzętowy I2C [Bascom] |
|
|
|
Ab ovo- zacznijmy od początku.
"Jedyne co zmieniłem to procesor z Atmega8 na Atmega8L".
Nowy- ustawiony fabrycznie na 1MHz z wewnętrznego oscylatora.
|
|
| Back to top |
|
 |
Logan Poziom 22

Joined: 09 Jul 2004 Posts: 1803 Location: Jelenia Góra
|
#17
15 Mar 2010 22:33 Re: Atmega8L i sprzętowy I2C [Bascom] |
|
|
|
Nie no, aż tak źle ze mną nie jest ;)
|
|
| Back to top |
|
 |
janbernat Poziom 23

Joined: 21 Oct 2008 Posts: 3680 Location: Warszawa
|
#18
15 Mar 2010 22:50 Re: Atmega8L i sprzętowy I2C [Bascom] |
|
|
|
No ja kiedyś też w akcie desperacji wstawiłem nowego DS i kwarc.
Na takiej samej płytce.
Co okazało się bez sensu- błąd był w programie.
A masz ten procesor który z tym chodził- nie przeprogramowany?
|
|
| Back to top |
|
 |
Logan Poziom 22

Joined: 09 Jul 2004 Posts: 1803 Location: Jelenia Góra
|
#19
18 Mar 2010 20:45 Re: Atmega8L i sprzętowy I2C [Bascom] |
|
|
|
Znalazłem przyczynę - uszkodzony portc.4, nie wiem tylko jak go uszkodziłem... Na porcie cały czas jest logiczne 0, nie działa nawet Set Portc.4.
|
|
| Back to top |
|
 |
janbernat Poziom 23

Joined: 21 Oct 2008 Posts: 3680 Location: Warszawa
|
#20
18 Mar 2010 21:12 Re: Atmega8L i sprzętowy I2C [Bascom] |
|
|
|
To zamiast Set Porc.4. wpisz lepiej set portc.4
|
|
| Back to top |
|
 |
Google

|
#
18 Mar 2010 21:12 |
|
|
|
|
|
| Back to top |
|
 |
Logan Poziom 22

Joined: 09 Jul 2004 Posts: 1803 Location: Jelenia Góra
|
#21
18 Mar 2010 21:22 Re: Atmega8L i sprzętowy I2C [Bascom] |
|
|
|
Literówka mi się wkradła, w sofcie mam set portc.4
|
|
| Back to top |
|
 |
janbernat Poziom 23

Joined: 21 Oct 2008 Posts: 3680 Location: Warszawa
|
#22
18 Mar 2010 22:27 Re: Atmega8L i sprzętowy I2C [Bascom] |
|
|
|
To jest sprzętowy SDA- jak ustawiłeś w programie TWEN w rejestrze TWCR to na nic nie reaguje.
Zrób nowy program do migania diodą na tym pinie.
|
|
| Back to top |
|
 |
Logan Poziom 22

Joined: 09 Jul 2004 Posts: 1803 Location: Jelenia Góra
|
#23
18 Mar 2010 23:02 Re: Atmega8L i sprzętowy I2C [Bascom] |
|
|
|
Cały czas mówię o nowym :)
| Code: |
$regfile = "m8def.dat" 'Atmega8
$crystal = 8000000 'kwarc 8MHz
Config Portc.4 = Output
Set Portc.4
Do
Toggle Portc.4
Wait 1
Loop
|
|
|
| Back to top |
|
 |